我正在尝试编译 openssl 但遇到错误。使用的 CFLAGS 是:
-O2 -fPIC -fno-strict-overflow
有人可以向我解释一下是什么吗.rodata
下面这句话是什么意思?
/usr/bin/ld: libcrypto.a(wp_block.o): relocation R_X86_64_32S against `.rodata'
can not be used when making a shared object; recompile with -fPIC
libcrypto.a(wp_block.o): error adding symbols: Bad value
我不确定 libcrypto.a 是什么,但显然它是 openssl 的一部分。
这怎么可能解决呢?
/usr/bin/ld: libcrypto.a(wp_block.o): 创建共享对象时不能使用针对 `.rodata' 的重定位 R_X86_64_32S;使用 -fPIC libcrypto.a(wp_block.o) 重新编译:添加符号时出错:错误值
实际上,这意味着您正在构建一个共享对象,但您没有指定-fPIC
。 PIC 是与位置无关的代码,它确保地址与程序计数器相关,因此可以轻松地重新定位代码(可以轻松更改模块的基地址并且可以正常工作)。
我相信我在 Fedora 上见过这个问题。既然你声称你正在使用它CFLAGS
,试试这个:
$ make clean && make dclean
$ export CFLAGS="-fPIC"
$ ./config shared no-ssl2 ...
$ make
...
The make clean && make dclean
将确保清除所有工件(包括旧的目标文件)。
新版本的 OpenSSL 响应make distclean
, not make dclean
.
我不确定 libcrypto.a 是什么,但显然它是 openssl 的一部分。
这是 OpenSSL 放置加密和辅助内容的库,例如 AES、Cameilla、SHA、大整数等。libssl.a
这是 SSL 和 TLS 内容的所在。libssl.a
取决于libcrypto.a
.
新版本的 OpenSSL 安装后无法找到其共享库。另请参阅问题 3993,libssl.so.1.1:无法打开共享对象文件在 OpenSSL 错误跟踪器中。
您希望使用静态链接,以便库不会破坏您的可执行文件。如果是这样,那么您可能想找到以下用途-lssl
and -lcrypto
在 Makefile 中,将其更改为-l:libssl.a
and -l:libcrypto.a
.
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)