she*_*evy 5 openssl makefile cflags
我正在尝试编译openssl但遇到错误.使用的CFLAGS是:
-O2 -fPIC -fno-strict-overflow
Run Code Online (Sandbox Code Playgroud)
有人可以向我解释.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
Run Code Online (Sandbox Code Playgroud)
我不确定libcrypto.a是什么,但显然它是openssl的一部分.
怎么可能修复这个?
jww*_*jww 12
/ 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
...
Run Code Online (Sandbox Code Playgroud)
这make clean && make dclean将确保清除所有工件(包括旧目标文件).
较新版本的OpenSSL会响应make distclean,而不是make dclean.
我不确定libcrypto.a是什么,但显然它是openssl的一部分.
这就是OpenSSL放置加密和帮助程序的库,如AES,Cameilla,SHA,大整数等libssl.a,这是SSL和TLS的用途.libssl.a取决于libcrypto.a.
较新版本的OpenSSL在安装后无法找到其共享库.另请参见问题3993,libssl.so.1.1:无法在OpenSSL错误跟踪器中打开共享对象文件.
您希望使用静态链接,因此库不会破坏您的可执行文件.如果是这样,那么您可能希望在Makefile中找到-lssl和使用-lcrypto它们,并将它们更改为-l:libssl.a和-l:libcrypto.a.
| 归档时间: |
|
| 查看次数: |
6069 次 |
| 最近记录: |