QT 5.5.1 .so 库 android
QT 5.5.1 .so library with android
我已经从 here 下载了用于 armeabi 和 x86 android 平台的 openssl 编译库,并尝试将其加载到 .pro 文件中:
INCLUDEPATH += C:\Temp\openssl\OpenSSL-for-Android-Prebuilt\openssl-1.0.2\include\
LIBS += -LC:\Temp\openssl\OpenSSL-for-Android-Prebuilt\openssl-1.0.2\armeabi-v7a\lib \
-llibssl
-llibcrypto
我也尝试过使用 -llibssl.so -llibcrypto.so
和 -llibssl.a -llibcrypto.a
但是出现了这个错误:
collect2.exe:-1: error: error: ld returned 1 exit status
代码是 SHA1 的简单用法,它在 MSVC 12.0 上 运行 成功地使用了 .lib 库:
mainwindow.cpp
#include "mainwindow.h"
#include "ui_mainwindow.h"
#include "QMessageBox"
#include <openssl/sha.h>
MainWindow::MainWindow(QWidget *parent) :
QMainWindow(parent),
ui(new Ui::MainWindow)
{
ui->setupUi(this);
const unsigned char ibuf[] = "compute sha1";
const char ibuf1[] = "compute sha1";
unsigned char obuf[20];
SHA1(ibuf, strlen(ibuf1), obuf);
int i;
for (i = 0; i < 20; i++) {
printf("%02x ", obuf[i]);
}
printf("\n");
}
MainWindow::~MainWindow()
{
delete ui;
}
void MainWindow::on_pushButton_clicked()
{
QMessageBox::about(this,tr("Test"),tr("Hellow man!!!"));
}
当然我已经阅读了论坛所以这里是完整的日志:
C:\Users\niki\Downloads\android-ndk-r10e/toolchains/arm-linux-androideabi-4.9/prebuilt/windows/bin/arm-linux-androideabi-g++ --sysroot=C:\Users\niki\Downloads\android-ndk-r10e/platforms/android-9/arch-arm/ -Wl,-soname,libtestAndroid.so -Wl,--no-undefined -Wl,-z,noexecstack -shared -o libtestAndroid.so main.obj mainwindow.obj moc_mainwindow.obj -LC:\Users\niki\Downloads\android-ndk-r10e/sources/cxx-stl/gnu-libstdc++/4.9/libs/armeabi -LC:\Users\niki\Downloads\android-ndk-r10e/platforms/android-9/arch-arm//usr/lib -LC:/Qt/5.5/android_armv5/lib -lQt5Widgets -Lc:\utils\android\ndk/sources/cxx-stl/gnu-libstdc++/4.8/libs/armeabi -Lc:\utils\android\ndk/platforms/android-9/arch-arm//usr/lib -lQt5Gui -lQt5Core -lGLESv2 -lgnustl_shared -llog -lz -lm -ldl -lc -lgcc
mainwindow.obj:mainwindow.cpp:function MainWindow::MainWindow(QWidget*): error: undefined reference to 'SHA1'
collect2.exe: error: ld returned 1 exit status
makefile:83: recipe for target 'libtestAndroid.so' failed
mingw32-make: *** [libtestAndroid.so] Error 1
10:47:05: The process "C:\Qt\Tools\mingw492_32\bin\mingw32-make.exe" exited with code 2.
Error while building/deploying project testAndroid (kit: Android for armeabi (GCC 4.9, Qt 5.5.1))
When executing step "Make"
问题似乎出在 SHA1 上。在sha.h中定义
#ifdef __cplusplus
extern "C" {
#endif
#ifdef __cplusplus
}
#endif
所以这不是问题所在。有一些 Android.mk 文件。该怎么办?我应该以某种方式将它加载到 .pro 文件中吗?我只是想在编译之前尝试在 android 中使用 openssl 以确保它可以工作(因为编译需要时间并且必须在 linux 上完成)。
我的问题是菜鸟。似乎当你想要 link 以 "lib" 开头的共享库时你应该错过它所以在我的情况下这有效:
INCLUDEPATH += C:\Temp\openssl\OpenSSL-for-Android-Prebuilt\openssl-1.0.2\include\
LIBS += -LC:\Temp\openssl\OpenSSL-for-Android-Prebuilt\openssl-1.0.2\armeabi-v7a\lib -lssl
LIBS += -LC:\Temp\openssl\OpenSSL-for-Android-Prebuilt\openssl-1.0.2\armeabi-v7a\lib -lcrypto
请注意,我在两个目录中将 libcrypto.so and libssl.so
与 libcrypto.a and libssl.a
分开 - lib 和 lib1。对我来说只有静态库(.a)有效,共享库给我错误。
我已经从 here 下载了用于 armeabi 和 x86 android 平台的 openssl 编译库,并尝试将其加载到 .pro 文件中:
INCLUDEPATH += C:\Temp\openssl\OpenSSL-for-Android-Prebuilt\openssl-1.0.2\include\
LIBS += -LC:\Temp\openssl\OpenSSL-for-Android-Prebuilt\openssl-1.0.2\armeabi-v7a\lib \
-llibssl
-llibcrypto
我也尝试过使用 -llibssl.so -llibcrypto.so
和 -llibssl.a -llibcrypto.a
但是出现了这个错误:
collect2.exe:-1: error: error: ld returned 1 exit status
代码是 SHA1 的简单用法,它在 MSVC 12.0 上 运行 成功地使用了 .lib 库:
mainwindow.cpp
#include "mainwindow.h"
#include "ui_mainwindow.h"
#include "QMessageBox"
#include <openssl/sha.h>
MainWindow::MainWindow(QWidget *parent) :
QMainWindow(parent),
ui(new Ui::MainWindow)
{
ui->setupUi(this);
const unsigned char ibuf[] = "compute sha1";
const char ibuf1[] = "compute sha1";
unsigned char obuf[20];
SHA1(ibuf, strlen(ibuf1), obuf);
int i;
for (i = 0; i < 20; i++) {
printf("%02x ", obuf[i]);
}
printf("\n");
}
MainWindow::~MainWindow()
{
delete ui;
}
void MainWindow::on_pushButton_clicked()
{
QMessageBox::about(this,tr("Test"),tr("Hellow man!!!"));
}
当然我已经阅读了论坛所以这里是完整的日志:
C:\Users\niki\Downloads\android-ndk-r10e/toolchains/arm-linux-androideabi-4.9/prebuilt/windows/bin/arm-linux-androideabi-g++ --sysroot=C:\Users\niki\Downloads\android-ndk-r10e/platforms/android-9/arch-arm/ -Wl,-soname,libtestAndroid.so -Wl,--no-undefined -Wl,-z,noexecstack -shared -o libtestAndroid.so main.obj mainwindow.obj moc_mainwindow.obj -LC:\Users\niki\Downloads\android-ndk-r10e/sources/cxx-stl/gnu-libstdc++/4.9/libs/armeabi -LC:\Users\niki\Downloads\android-ndk-r10e/platforms/android-9/arch-arm//usr/lib -LC:/Qt/5.5/android_armv5/lib -lQt5Widgets -Lc:\utils\android\ndk/sources/cxx-stl/gnu-libstdc++/4.8/libs/armeabi -Lc:\utils\android\ndk/platforms/android-9/arch-arm//usr/lib -lQt5Gui -lQt5Core -lGLESv2 -lgnustl_shared -llog -lz -lm -ldl -lc -lgcc
mainwindow.obj:mainwindow.cpp:function MainWindow::MainWindow(QWidget*): error: undefined reference to 'SHA1'
collect2.exe: error: ld returned 1 exit status
makefile:83: recipe for target 'libtestAndroid.so' failed
mingw32-make: *** [libtestAndroid.so] Error 1
10:47:05: The process "C:\Qt\Tools\mingw492_32\bin\mingw32-make.exe" exited with code 2.
Error while building/deploying project testAndroid (kit: Android for armeabi (GCC 4.9, Qt 5.5.1))
When executing step "Make"
问题似乎出在 SHA1 上。在sha.h中定义
#ifdef __cplusplus
extern "C" {
#endif
#ifdef __cplusplus
}
#endif
所以这不是问题所在。有一些 Android.mk 文件。该怎么办?我应该以某种方式将它加载到 .pro 文件中吗?我只是想在编译之前尝试在 android 中使用 openssl 以确保它可以工作(因为编译需要时间并且必须在 linux 上完成)。
我的问题是菜鸟。似乎当你想要 link 以 "lib" 开头的共享库时你应该错过它所以在我的情况下这有效:
INCLUDEPATH += C:\Temp\openssl\OpenSSL-for-Android-Prebuilt\openssl-1.0.2\include\
LIBS += -LC:\Temp\openssl\OpenSSL-for-Android-Prebuilt\openssl-1.0.2\armeabi-v7a\lib -lssl
LIBS += -LC:\Temp\openssl\OpenSSL-for-Android-Prebuilt\openssl-1.0.2\armeabi-v7a\lib -lcrypto
请注意,我在两个目录中将 libcrypto.so and libssl.so
与 libcrypto.a and libssl.a
分开 - lib 和 lib1。对我来说只有静态库(.a)有效,共享库给我错误。