c ++链接器错误'针对.rodata.str1.1'的R_X86_64_32重定位链接CXX共享库libsrt.so

时间:2018-08-08 14:25:35

标签: c++ linker g++ shared-libraries libcrypto

每次运行make时都会出现此错误。如果我从另一个目录复制libsrt.so,则会对其进行编译。有人知道吗?

Linking CXX shared library libsrt.so
/usr/bin/ld: /usr/local/ssl/lib/libcrypto.a(aes_misc.o): relocation R_X86_64_32 against `.rodata.str1.1' can not be used when making a shared object; recompile with -fPIC
/usr/local/ssl/lib/libcrypto.a: error adding symbols: Bad value
collect2: error: ld returned 1 exit status
CMakeFiles/srt.dir/build.make:763: recipe for target 'libsrt.so.1.2.0' failed

2 个答案:

答案 0 :(得分:0)

错误消息告诉您,libsrt.so的链接失败,因为您尝试将libcrypto.alibcrypto.a链接,但是-fPIC与{{ 1}}。

-fPIC是一个编译器标志,它将代码生成更改为共享对象所需的生产位置独立代码(PIC),因为链接器不知道共享对象的加载位置。

要解决此问题,您可以:

  • 如果您自己遵守,则将libcrypto.a-fPIC重新组合
  • 如果您收到已编译的binairies,请使用libcrypto libcrypto.so的共享库

在您的情况下,使用libcrypto.so将libcrypto作为openssl的一部分要好得多

答案 1 :(得分:0)

您需要构建libcrypto-libcrypto.so的共享版本。并对此进行链接(当存在.so时,链接器会自动进行链接。)