Ошибка связывания со статической библиотекой Boost :: Python в Ubuntu x64 - PullRequest
0 голосов
/ 16 февраля 2012

Я пытался создать небольшой модуль Python для x64 linux в runtime-link и статической конфигурации link, но, к сожалению, безуспешно. Я использую Boost :: Python v.1.47 в Ubuntu x64 10.04 с gcc 4.4.3 и средой Python 2.6.5.

Я собрал Boost :: Python вручную, используя b2 без проблем с параметрами, установленными на:

toolset=gcc variant=release address-model=64 link=static runtime-link=static

Далее 'Я пытаюсь собрать свой модуль (pydsrc.cpp), используя bjam с теми же параметрами, но на этапе компоновщика gcc это не удается. Ниже приведены последние строки этапа сборки:

...
gcc.compile.c++ ../bin.v2/libs/python/build/gcc-4.4.3/release/address-model-64/link-static/runtime-link-static/object/function_doc_signature.o
gcc.archive ../bin.v2/libs/python/build/gcc-4.4.3/release/address-model-64/link-static/runtime-link-static/libboost_python.a
gcc.link.dll bin/gcc-4.4.3/release/address-model-64/link-static/runtime-link-static/pydsrc.so
/usr/bin/ld: /usr/lib/gcc/x86_64-linux-gnu/4.4.3/crtbeginT.o: relocation R_X86_64_32 against `__DTOR_END__' can not be used when making a shared object; recompile with -fPIC
/usr/lib/gcc/x86_64-linux-gnu/4.4.3/crtbeginT.o: could not read symbols: Bad value
collect2: ld returned 1 exit status

"g++"    -o "bin/gcc-4.4.3/release/address-model-64/link-static/runtime-link-static/pydsrc.so" -Wl,-h -Wl,pydsrc.so -shared -Wl,--start-group "bin/gcc-4.4.3/release/address-model-64/link-static/runtime-link-static/pydsrc.o" 
 "../bin.v2/libs/python/build/gcc-4.4.3/release/address-model-64/link-static/runtime-link-static/libboost_python.a"   -lutil -lpthread -ldl   -Wl,--end-group -static -m64

На Win7 x64 с использованием набора инструментов msvc9 я скомпилировал его без особых трудностей, но не могу добиться успеха в Ubuntu. Кто-нибудь сталкивался с подобной проблемой или знает, что может быть решением? Будем весьма благодарны за любую помощь или подсказку, как правильно собрать модуль.

Приветствия

1 Ответ

1 голос
/ 27 мая 2012

Попробуйте включить флаг компиляции PIC (позиционно-независимый код) через директиву cxxflags.Так что в вашем случае что-то вроде:

toolset=gcc variant=release address-model=64 cxxflags=-fPIC link=static runtime-link=static
...