我正在尝试对他为我们编写的某些自定义软件的前一个员工的构建过程进行逆向工程。我已经看到一切都可以编译好了,但我在链接过程中遇到一个错误,指出了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
Os是Fedora 11
答案 0 :(得分:1)
链接到共享库的每个目标文件都必须与位置无关,这意味着加载程序可以在内存中的任何位置移动它,它仍然可以工作。您的加密库没有以这种方式编译,因此将-fPIC
重新编译的警告添加到您的编译标志中。或者,您可以使libutil成为静态库而不是共享库。如果没有关于构建文件的更多详细信息,我无法提供有关如何执行此操作或选择哪个文件的更多详细信息。