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

c++ Linker error 'relocation R_X86_64_32 against `.rodata.str1.1' Linking CXX shared library libsrt.so

本文关键字:链接 X86 CXX libsrt so 定位 共享 新定位 rodata 针对 错误      更新时间:2023-10-16

每次运行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.so的链接失败,因为您尝试将libsrt.solibcrypto.a链接,但libcrypto.a不符合-fPIC

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

要解决此问题,您可以:

  • 如果您自己遵守,请重新libcrypto.a-fPIC
  • 如果您收到了编译的二进制文件,请使用 libcryptolibcrypto.so的共享对象

在您的情况下,libCrypto 使用libcrypto.so成为 OpenSSL 的一部分要好得多

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