我正在尝试在 QGIS 构建Python 2.6 /en.wikipedia.org/wiki/Red_Hat_Enterprise_Linux"rel =“noreferrer”> RHEL 5。 在制作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 flag。

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

CCSHARED="-fPIC";

但它不起作用..

如何在配置时指定我想将 CCSHARED 设置为 -fPIC

有帮助吗?

解决方案

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

其他提示

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

make clean
./configure CFLAGS=-fPIC CXXFLAGS=-fPIC

我通过在 CC = gcc -pthread 之后添加 -fPIC 来实现它, 即Makefile中的 CC = gcc -pthread -fPIC

  1. 运行 ./ configure --help ,可能管道到grep PIC,看看是否有启用此选项的选项
  2. 尝试在运行configure之前设置环境变量,例如CCSHARED = QUOT; -fPIC" ./configure(作为单个命令,假设是bash)
  3. 如果这些都不起作用,您需要阅读配置代码并更好地了解它所测试的条件。

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

那不是 CCFLAGS 吗? (暂时不是世界的那一方。)

重建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

并且有效

以下是通过fPIC的示例配置

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top