构建和安装OpenSSL 1.0.0.e没有问题,我所要做的就是在Makefile中设置正确的编译器。
在没有OpenSSL的情况下编译libCURL可以正常工作,但在使用
进行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
我尝试使用-fPIC
编译OpenSSL,并尝试将-fPIC
用于libCURL无济于事。我该如何解决这个问题?
答案 0 :(得分:1)
我认为这最有效,因为它不涉及黑客攻击文件。
./Configure linux-x86_64 -fPIC
我通过运行找到了这个
./config -h
并作一些猜测。我通过使用
确认它有效grep PIC Makefile
答案 1 :(得分:0)
在tarball的根目录中打开名为Configure
的OpenSSL文件。向下移动到第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
添加到使用的选项中。
或者,在tarball的根目录中打开名为Makefile.org
的OpenSSL文件。向下移动到第60行左右,您将看到以下内容:
CC= gcc
将以下内容添加为CC
:
CC= gcc -fPIC
它是一种黑客攻击,因为你想为CFLAGS
执行此操作,但Makefile不会引入宏。
或者,您可以等到OpenSSL的配置完成后(即运行./config
后),然后打开所有makefile并将其添加到从CFLAGS
模板创建的Makefile.org
。请务必访问crypto
和engines
等子目录中的makefile。
OpenSSL的最终解决方案是向config
和Configure
添加自定义行。 Ben Laurie和其他人在执行自定义构建时这样做。搜索config
和Configure
搜索“debug-ben”或“ben-debug”或类似内容。
对于libcurl
,我认为这是一个自动化项目。只需执行以下操作:
$ export CFLAGS="-fPIC"
$ ./config