【发布时间】:2018-08-13 20:26:13
【问题描述】:
我正在尝试从 KDE (here) 编译 KArchive。显然,我正在按照他们在安装文件中的说明进行操作。首先一切顺利,我只需要创建一个名为 build 的目录并在其中使用:
cmake .. \
-DCMAKE_BUILD_TYPE=debug \
-DCMAKE_INSTALL_PREFIX=/usr/local
进展顺利。当我必须使用 make 时出现问题。运行后出现以下错误:
/usr/bin/ld: /usr/local/lib/libbz2.a(bzlib.o): relocation R_X86_64_32S against symbol BZ2_crc32Table can not be used when making a shared object; recompile with -fPIC
/usr/bin/ld: /usr/local/lib/libbz2.a(compress.o): relocation R_X86_64_32 against .rodata.str1.1 can not be used when making a shared object; recompile with -fPIC
/usr/bin/ld: /usr/local/lib/libbz2.a(decompress.o): relocation R_X86_64_32S against .rodata can not be used when making a shared object; recompile with -fPIC
/usr/bin/ld: /usr/local/lib/libbz2.a(blocksort.o): relocation R_X86_64_32 against .rodata.str1.1 can not be used when making a shared object; recompile with -fPIC
现在,这个问题并不少见,但大多数解决方案都对我不起作用。
【问题讨论】:
-
您尝试过哪些解决方案?错误消息是明确的,您不能使用静态库
.a创建共享库.so。你电脑上locate libbz2的输出是什么? -
一些解决方案据说在运行 ./configure 时使用 --enable-shared,但我没有配置文件。我还尝试在 makefile 中设置 CXXFLAGS=-fPIC 但没有帮助。定位的输出是: /usr/lib/libbz2.so.1 /usr/lib/libbz2.so.1.0.6 /usr/lib64/libbz2.so /usr/lib64/libbz2.so.1 /usr/lib64 /libbz2.so.1.0.6 /usr/lib64/qt5/plugins/kerfuffle/kerfuffle_libbz2.so /usr/local/lib/libbz2.a
-
由于您拥有
/usr/lib/libbz2.so.1,因此您不必使用-fPIC标志重新编译您的库。您显然必须更正共享库,但您的链接器使用了错误的库。您可以尝试将-DCMAKE_LIBRARY_PATH=/usr/lib/标志添加到您的 Cmake 命令中,看看是否有任何变化? -
是的,这行得通。谢谢。