1

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

2 回答 2

0

错误消息告诉您的是链接失败,libsrt.so因为您尝试链接但未libsrt.so遵守。libcrypto.alibcrypto.a-fPIC

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

要解决此问题,您可以:

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

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

于 2018-08-08T14:38:31.580 回答
0

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

于 2018-08-08T16:27:38.080 回答