c ++ Linker error ‘перемещение R_X86_64_32 против `.rodata.str1.1’ Связывание общей библиотеки CXX libsrt.so

Я получаю эту ошибку каждый раз, когда запускаю 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

1

Решение

что сообщение об ошибке говорит вам, что связывание libsrt.so не удалось, потому что вы пытались связать libsrt.so с libcrypto.a но libcrypto.a не соблюдается -fPIC,

-fPIC является флагом соответствия, который изменяет генерацию кода на независимый код рабочей позиции (PIC), который требуется для общего объекта, потому что компоновщик не знает, куда будет загружен общий объект.

Чтобы решить эту проблему, вы можете:

  • recomplie libcrypto.a с -fPIC если вы выполнили это сами
  • использовать общий объект libcrypto libcrypto.so если вы получили скомпилированные бинарии

в вашем случае libcrypto является частью openssl, используя libcrypto.so намного лучше

0

Другие решения

Вам необходимо создать общую версию libcryptolibcrypto.so, И ссылка против этого (компоновщик делает это автоматически, когда .so настоящее).

0

По вопросам рекламы [email protected]