无法将libCURL与OpenSSL链接

时间:2011-11-04 13:38:29

标签: linux cross-platform openssl libcurl

构建和安装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无济于事。我该如何解决这个问题?

2 个答案:

答案 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 。请务必访问cryptoengines等子目录中的makefile。


OpenSSL的最终解决方案是向configConfigure添加自定义行。 Ben Laurie和其他人在执行自定义构建时这样做。搜索configConfigure搜索“debug-ben”或“ben-debug”或类似内容。


对于libcurl,我认为这是一个自动化项目。只需执行以下操作:

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