如何在执行./configure时设置ccshared = -fPIC?
题
我正在尝试在 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
。
- 运行
./ configure --help
,可能管道到grep PIC,看看是否有启用此选项的选项 - 尝试在运行configure之前设置环境变量,例如CCSHARED = QUOT; -fPIC" ./configure(作为单个命令,假设是bash) 醇>
如果这些都不起作用,您需要阅读配置代码并更好地了解它所测试的条件。
如其他地方所述,使用--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的示例配置