我每次运行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

最佳答案

错误消息告诉您,由于您尝试将libsrt.solibsrt.so链接,但libcrypto.a不符合libcrypto.a,因此-fPIC的链接失败。
-fPIC是一个编译器标志,它将代码生成更改为共享对象所需的生产位置无关代码(PIC),因为链接器不知道共享对象的加载位置。

要解决此问题,您可以:

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

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

    关于c++ - c++链接器错误 'relocation R_X86_64_32 against ` .rodata.str1.1'链接CXX共享库libsrt.so,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/51749149/

    10-13 07:54