#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