如何在执行./configure时设置ccshared = -fPIC?

时间:2009-03-10 12:42:42

标签: c++ makefile g++

我正在尝试在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

9 个答案:

答案 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)

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

答案 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