Не могу связать libCURL с OpenSSL - PullRequest
2 голосов
/ 04 ноября 2011

Сборка и установка OpenSSL 1.0.0.e работали без проблем, все, что мне нужно было сделать, это настроить правильный компилятор в Makefile.

Компиляция libCURL без OpenSSL работает нормально, но при компиляции с OpenSSL с использованием

./configure --host=mipsel-angstrom-linux PCRECONFIG=/usr/local/crosstoolchain/usr/local/bin/pcre-config --with-openssl

Я получаю следующее сообщение об ошибке:

ld: libssl.a(s2_clnt.o): relocation R_MIPS_HI16 against `a local symbol' can not be used when making a shared object; recompile with -fPIC
libssl.a: could not read symbols: Bad value

Я пытался скомпилировать OpenSSL с -fPIC, а также пытался использовать -fPIC для libCURL, но безрезультатно. Как я могу решить эту проблему?

Ответы [ 2 ]

1 голос
/ 03 августа 2018

Я думаю, что это работает лучше всего, поскольку не требует взлома файлов.

./Configure linux-x86_64 -fPIC

Я нашел это, запустив

./config -h

и сделать несколько догадок. Я подтвердил, что это работает, используя

grep PIC Makefile
0 голосов
/ 02 декабря 2013

Откройте файл OpenSSL с именем Configure в корне архива.Переместитесь вниз к строке 610, и вы увидите следующее для MIPS (найдите лучшее совпадение, если оно плохое):

"vxworks-mips","ccmips:-mrtp -mips2 -O -G 0 -B\$(WIND_BASE)/host/\$(WIND_HOST_TYPE)/lib/gcc-lib/ -D_VSB_CONFIG_FILE=\"\$(WIND_BASE)/target/lib/h/config/vsbConfig.h\" -DCPU=MIPS32 -msoft-float -mno-branch-likely -DTOOL_FAMILY=gnu -DTOOL=gnu -fno-builtin -fno-defer-pop -DNO_STRINGS_H -I\$(WIND_BASE)/target/usr/h -I\$(WIND_BASE)/target/h/wrn/coreip::-D_REENTRANT:VXWORKS:-Wl,--defsym,__wrs_rtp_base=0xe0000000 -L \$(WIND_BASE)/target/usr/lib/mips/MIPSI32/sfcommon::${mips32_asm}:o32::::::ranlibmips:",

Добавьте -fPIC к используемым параметрам.


Альтернативно, откройте файл OpenSSL с именем Makefile.org в корне архива.Перейдите к строке 60, и вы увидите следующее:

CC= gcc

Добавьте следующее как CC:

CC= gcc -fPIC

Это своего рода хак, потому что вы хотите это сделатьдля CFLAGS, но Makefile не принимает макрос.


Или вы можете подождать, пока завершится конфигурация OpenSSL (т. е. после запуска ./config), а затем открыть все make-файлы идобавьте его в CFLAGS, созданный из шаблона Makefile.org.Обязательно посетите make-файлы в подкаталогах, таких как crypto и engines.


. Окончательное решение для OpenSSL - добавить пользовательскую строку в config и Configure.Бен Лори и другие делают это, когда выполняют пользовательские сборки.Ищите config и Configure для "debug-ben" или "ben-debug" или аналогичного.


Для libcurl, я полагаю, это проект автомобильного проекта.Просто выполните следующее:

$ export CFLAGS="-fPIC"
$ ./config
...