我正在尝试在QGIS 5上为RHEL构建Python 2.6。 在制作QGIS期间,我收到以下错误:
Linking CXX shared library libqgispython.so
/usr/bin/ld: /usr/local/lib/python2.6/config/libpython2.6.a(abstract.o): relocation R_X86_64_32 against `a local symbol' can not be used when making a shared object; recompile with -fPIC
/usr/local/lib/python2.6/config/libpython2.6.a: could not read symbols: Bad value
collect2: ld returned 1 exit status
make[2]: *** [src/python/libqgispython.so.1.0] Error 1
make[1]: *** [src/python/CMakeFiles/qgispython.dir/all] Error 2
make: *** [all] Error 2
我从这个错误中得出的结论是,我需要使用一些标志-fPIC
来构建Python 2.6。
好的,所以我在configure.in
文件中找到了它,但它检查了几个条件,并根据这些条件将-fPIC
分配给CCSHARED
标记。
我所做的是,在检查完所有条件后,我添加了以下行,故意将CCSHARED
用作-fPIC
。
CCSHARED="-fPIC";
但它不起作用..
如何在配置时指定我要将CCSHARED
设置为-fPIC
?
答案 0 :(得分:17)
使用--enable-shared
运行configure。然后-fPIC
将作为共享标志的一部分包含在内。
答案 1 :(得分:9)
当我遇到这个错误时,以下内容对我有用:
make clean
./configure CFLAGS=-fPIC CXXFLAGS=-fPIC
答案 2 :(得分:6)
我通过在-fPIC
之后添加CC= gcc -pthread
来实现它,
即Makefile中的CC= gcc -pthread -fPIC
。
答案 3 :(得分:3)
./configure --help
,可能管道到grep PIC,看看是否有启用此功能的选项如果这些都不起作用,您需要阅读配置代码并更好地了解它所测试的条件。
答案 4 :(得分:0)
不是CCFLAGS
吗? (暂时不是世界的那一方。)
答案 5 :(得分:0)
如其他地方所述,使用--enable-shared运行configure应该使-fPIC包含在编译器标志中。但是,如果您尝试使用例如'make -j8'进行并行构建,则可能仍会看到“无法读取符号”错误。我在RHEL 5.2上遇到了同样的错误,当我从make调用中删除'-j8'时它才消失...
答案 6 :(得分:0)
重建openssl ./config --prefix = / software / bea / openssl / 100c --openssldir = / software / bea / openssl / 100c / ssl shared -fPIC
然后它也工作。它给/ usr / bin / ld:链接失败了。 我们修改了make文件中的链接部分 以前它是gcc -Wall -shared -o pwutil.so asciihex.o base64.o bitutils.o dict.o gen_rand.o key_schedule.o md5c.o pdg2_ecb.o pwutils.o random_data.o hexutils.o des3crypt.o blowcrypt .o /software/bea/openssl/1.0.0c/lib/libcrypto.a
我们在使用共享选项重建后将libcrypto.a更改为libcrypto.so并且 - fPIC
gcc -Wall -shared -o pwutil.so asciihex.o base64.o bitutils.o dict.o gen_rand.o key_schedule.o md5c.o pdg2_ecb.o pwutils.o random_data.o hexutils.o des3crypt.o blowcrypt .o /software/bea/openssl/1.0.0c/lib/libcrypto.so
并且有效
答案 7 :(得分:0)
以下有example传递fPIC来配置
答案 8 :(得分:0)
我可以和它一起工作
./configure --enable-shared --enable-pic