компиляция Qt 5 завершается ошибкой make в debian64

Я попытался сделать qt 5.4.1 с конфигурацией openSsl, но во время этого я получил несколько ошибок.

Я настроил его следующим образом:

OPENSSL_LIBS='-L/usr/local/ssl/lib -lssl -lcrypto' ./configure -prefix $PWD/qtbase -opensource -debug-and-release -nomake tests -openssl-linked -I/usr/local/ssl/include -L/usr/local/ssl/lib

а затем make.

последние 10 строк вывода:

/usr/bin/ld: /usr/local/ssl/lib/libssl.a(s2_srvr.o): relocation R_X86_64_32 against `.rodata' can not be used when making a shared object; recompile with -fPIC
/usr/local/ssl/lib/libssl.a: could not read symbols: Bad value
collect2: error: ld returned 1 exit status
make[3]: *** [../../lib/libQt5Network.so.5.4.1] Error 1
make[3]: Leaving directory `/mnt/l/software/qt-everywhere-opensource-src-5.4.1/qtbase/src/network'
make[2]: *** [sub-network-make_first] Error 2
make[2]: Leaving directory `/mnt/l/software/qt-everywhere-opensource-src-5.4.1/qtbase/src'
make[1]: *** [sub-src-make_first] Error 2
make[1]: Leaving directory `/mnt/l/software/qt-everywhere-opensource-src-5.4.1/qtbase'
make: *** [module-qtbase-make_first] Error 2

person Ebrahimi    schedule 30.05.2015    source источник
comment
... как вы скомпилировали OpenSSL? Похоже, вы не правильно его настроили.   -  person peppe    schedule 30.05.2015
comment
Возможный дубликат Перемещение R_X86_64_32S против `.rodata' ... При компиляции на 64-битной платформе. Настройте OpenSSL с параметром shared, чтобы гарантировать использование -fPIC.   -  person jww    schedule 30.05.2015


Ответы (1)


Чтобы связать статическую библиотеку с общей библиотекой на платформе x86_64, статическую библиотеку необходимо скомпилировать с помощью -fPIC. Теперь вы можете собрать OpenSSL вручную с установленным параметром -fPIC, но это будет немного хлопотно.

Я бы предложил настроить Qt с -openssl вместо -openssl-linked. Тогда SSL не будет компоноваться во время компиляции, а загружаться динамически (dlopen) во время выполнения. Это обычный способ работы с OpenSSL в Qt, также из-за несовместимости между лицензиями OpenSSL и GPL.

person Frank Osterfeld    schedule 30.05.2015