Ошибка компоновщика Crypto ++ при использовании ANT - PullRequest
1 голос
/ 14 октября 2010

Я пытаюсь перепроектировать процесс сборки предыдущего сотрудника для некоторого программного обеспечения, которое он написал для нас. Я видел, что все компилируется нормально, но я получаю ошибку в процессе компоновки, которая указывает на проблему с crypto ++. Любые подсказки?

compile.util:

compile:
     [echo] Compiling: util
       [cc] Starting dependency analysis for 55 files.
       [cc] 55 files are up to date.
       [cc] 0 files to be recompiled from dependency analysis.
       [cc] 0 total files to be compiled.

link.util:

link:
     [echo] Linking shared library: libutil
       [cc] 0 total files to be compiled.
       [cc] Starting link
       [cc] /usr/bin/ld: /home/john/softwarename/thirdparty/crypto/5.6.1_64/libcryptopp.a(cryptlib.o): relocation R_X86_64_32 against `CryptoPP::DEFAULT_CHANNEL' can not be used when making a shared object; recompile with -fPIC
       [cc] /home/john/softwarename/thirdparty/crypto/5.6.1_64/libcryptopp.a: could not read symbols: Bad value
       [cc] collect2: ld returned 1 exit status

BUILD FAILED
/home/john/softwarename/build/build.xml:167: Following error occured while executing this line
/home/john/softwarename/build/link.xml:27: gcc failed with return code 1

ОС Fedora 11

1 Ответ

1 голос
/ 14 октября 2010

Каждый объектный файл, на который вы ссылаетесь в разделяемой библиотеке, должен быть независимым от позиции, то есть загрузчик может перемещать его в память куда угодно, и он все равно будет работать.Ваша криптографическая библиотека не была скомпилирована таким образом, следовательно, есть предостережение перекомпилировать ее с добавлением -fPIC в ваши флаги компиляции.Кроме того, вы можете сделать libutil статической библиотекой вместо общей.Без более подробной информации о ваших файлах сборки я не могу предоставить более подробную информацию о том, как это сделать или какой выбрать.

...