23

我正在尝试在RHEL 5 上为QGIS构建 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

我从这个错误中得出的结论是我需要使用一些标志构建 Python 2.6 -fPIC,. 好的,所以我在configure.in文件中找到了它,但它检查了几个条件,并根据这些条件分配-fPICCCSHARED标志。

我所做的是,在检查了所有条件后,我添加了以下行以故意使用CCSHAREDas -fPIC

CCSHARED="-fPIC";

但它没有工作..

配置时如何指定我要设置CCSHARED-fPIC

4

9 回答 9

22

运行配置--enable-shared。然后-fPIC将作为共享标志的一部分包含在内。

于 2009-05-11T22:59:18.867 回答
14

当我遇到此错误时,以下内容对我有用:

make clean
./configure CFLAGS=-fPIC CXXFLAGS=-fPIC
于 2016-12-19T20:50:47.590 回答
6

我通过在 Makefile 中添加after-fPIC来实现它。CC= gcc -pthreadCC= gcc -pthread -fPIC

于 2009-03-12T01:17:55.803 回答
3
  1. 运行./configure --help,可能通过管道连接到 grep PIC,以查看是否有启用此选项的选项
  2. 在运行配置之前尝试设置环境变量,例如 CCSHARED="-fPIC" ./configure (作为单个命令,假设 bash)

如果这些都不起作用,您需要阅读配置代码并更好地了解它测试的条件。

于 2009-03-10T12:45:57.023 回答
2

如其他地方所述,使用 --enable-shared 运行配置应该导致 -fPIC 包含在编译器标志中。但是,如果您尝试使用例如“make -j8”进行并行构建,您可能仍然会看到“无法读取符号”错误。我在 RHEL 5.2 上遇到了同样的错误,只有当我从 make 调用中删除“-j8”时它才消失......

于 2009-06-22T07:47:22.633 回答
0

不是CCFLAGS吗?(已经有一段时间没有来到世界的那一边了。)

于 2009-03-10T12:44:50.583 回答
0

使用 ./config --prefix=/software/bea/openssl/100c --openssldir=/software/bea/openssl/100c/ssl shared -fPIC 重建 openssl

然后它也有用。它给了 /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

在使用共享选项和 fPIC 重建后,我们将 libcrypto.a 更改为 libcrypto.so

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 /软件/bea/openssl/1.0.0c/lib/libcrypto.so

它奏效了

于 2012-04-19T06:08:17.060 回答
0

下面有一个通过fPIC来配置的例子

于 2014-08-31T21:18:47.603 回答
0

我得到了它的工作:

./configure --enable-shared --enable-pic
于 2020-02-10T03:41:40.863 回答