Ответ 1
Запустите configure с --enable-shared. Затем -fPIC будет включен как часть общих флагов.
Я пытаюсь построить 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
?
Запустите configure с --enable-shared. Затем -fPIC будет включен как часть общих флагов.
Я начал работать, добавив -fPIC
после CC= gcc -pthread
,
i.e CC= gcc -pthread -fPIC
в Makefile.
./configure --help
, возможно, подключитесь к grep PIC, чтобы узнать, есть ли возможность включить этотЕсли ни одна из этих функций не работает, вам необходимо прочитать код конфигурации и понять условия, которые он тестирует для улучшения.
Следующие действия работали для меня, когда я столкнулся с этой ошибкой:
make clean
./configure CFLAGS=-fPIC CXXFLAGS=-fPIC
Разве это не CCFLAGS
? (Не было той стороны мира какое-то время.)
Как уже упоминалось в другом месте, запуск configure с --enable-shared должен приводить к включению -fPIC в флагов компилятора. Тем не менее, вы все равно можете увидеть ошибку "не читать символы", если попытаетесь выполнить параллельную сборку, используя, например, "make -j8". У меня была такая же ошибка в RHEL 5.2, и она ушла только тогда, когда я удалил "-j8" из моего вызова make...
перестроил 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 для настройки