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

Я пытаюсь построить 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?

Ответы

Ответ 1

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

Ответ 2

Я начал работать, добавив -fPIC после CC= gcc -pthread, i.e CC= gcc -pthread -fPIC в Makefile.

Ответ 3

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

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

Ответ 4

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

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

Ответ 5

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

Ответ 6

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

Ответ 7

перестроил 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

и он работал

Ответ 8

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