2015-11-27 3 views
0

Я скачал OpenSSL скомпилирован библиотеку для armeabi и x86 андроид платформ от here и пытался загрузить его в файл .pro:QT 5.5.1 .so библиотека с андроида

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 является проблемой. В шахах определяется

#ifdef __cplusplus 
extern "C" { 
#endif 
#ifdef __cplusplus 
} 
#endif 

так что это не проблема. Существует файл Android.mk. Что делать? Должен ли я загружать его как-то в файл .pro? Я просто хотел попробовать использовать openssl в андроиде, прежде чем компилировать его, чтобы быть уверенным, что можно работать (потому что компиляция займет время и должна быть выполнена на Linux).

ответ

0

Мой вопрос был noobie. Кажется, когда вы хотите связать разделяемые библиотеки, начинающиеся с «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 от в двух каталогах - LIB и lib1. Для меня только статические libs (.a) работали, общие библиотеки давали мне ошибку.

Смежные вопросы