Не удается связать libCURL с OpenSSL

#linux #cross-platform #openssl #libcurl

#linux #кроссплатформенный #openssl #libcurl

Вопрос:

Сборка и установка 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 безрезультатно. Как я могу решить эту проблему?

Ответ №1:

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

 ./Configure linux-x86_64 -fPIC
  

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

 ./config -h
  

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

 grep PIC Makefile
  

Ответ №2:

Откройте файл 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 Я считаю, что это проект automake. Просто выполните следующее:

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