Как я могу установить ccshared = -fPIC при выполнении ./configure? - PullRequest
18 голосов
/ 10 марта 2009

Я пытаюсь собрать Python 2.6 для QGIS на 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

Что я понял из этой ошибки, так это то, что мне нужно собрать Python 2.6 с некоторым флагом -fPIC. Итак, я нашел его в файле configure.in, но он проверяет несколько условий и на основании этих условий присваивает -fPIC флагу CCSHARED.

Что я сделал, так это то, что после проверки всех условий я добавил следующую строку, чтобы преднамеренно использовать CCSHARED как -fPIC.

CCSHARED="-fPIC";

Но это не сработало ..

Как указать при настройке, что я хочу установить CCSHARED как -fPIC?

Ответы [ 8 ]

17 голосов
/ 12 мая 2009

Запустите настройку с --enable-shared. Тогда -fPIC будет включено как часть общих флагов.

9 голосов
/ 19 декабря 2016

Когда я столкнулся с этой ошибкой, у меня сработало следующее:

make clean
./configure CFLAGS=-fPIC CXXFLAGS=-fPIC
6 голосов
/ 12 марта 2009

Я заработал, добавив -fPIC после CC= gcc -pthread, т.е. CC= gcc -pthread -fPIC в Makefile.

3 голосов
/ 10 марта 2009
  1. Запустите ./configure --help, возможно, отправив команду grep PIC, чтобы увидеть, есть ли возможность включить эту
  2. Попробуйте установить переменную среды перед запуском configure, например, CCSHARED = "- fPIC" ./configure (как одна команда, принимая bash)

Если ни один из этих способов не работает, вам необходимо прочитать код конфигурации и понять условия, которые он тестирует для улучшения.

0 голосов
/ 01 сентября 2014

Ниже приведен пример передачи fPIC для настройки

0 голосов
/ 19 апреля 2012

восстановил 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

и это сработало

0 голосов
/ 22 июня 2009

Как отмечалось в другом месте, запуск configure с параметром --enable-shared должен привести к включению -fPIC во флаги компилятора. Однако вы все равно можете увидеть ошибку «не удалось прочитать символы», если попытаетесь выполнить параллельную сборку, используя, например, «make -j8». У меня была такая же ошибка на RHEL 5.2, и она исчезла только тогда, когда я удалил '-j8' из моего вызова make ...

0 голосов
/ 10 марта 2009

Разве это не CCFLAGS? (Давно не был той стороной мира.)

...