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

StackOverflow https://stackoverflow.com/questions/629961

  •  08-07-2019
  •  | 
  •  

Вопрос

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

Это было полезно?

Решение

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

Другие советы

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

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

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

<Ол>
  • Запустите ./ configure --help , возможно, отправив команду grep PIC, чтобы проверить, есть ли возможность включить это
  • Попробуйте установить переменную среды перед запуском configure, например, CCSHARED = & Quot; -fPIC & Quot; ./configure (как одна команда, принимая bash)
  • Если ни один из них не работает, вам необходимо прочитать код конфигурации и понять условия, которые он тестирует для улучшения.

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

    Разве это не 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