2015-02-18 3 views
0

У меня есть libstdC++ _ pic.a в моей системе (Ubuntu 12.04, gcc 4.6.3), предположительно это версия libstdC++, созданная с -fPIC. У меня также есть libstdC++. A.Как связаться с libstdC++ _ pic.a с GCC?

я вижу следующее сообщение об ошибке, когда я пытаюсь статически libstdC++ с общей библиотеки через -Static-libstdC++ флаг ссылка:

:-1: error: /usr/lib/gcc/x86_64-linux-gnu/4.6/libstdc++.a(functexcept.o): relocation R_X86_64_32 against `std::bad_exception::~bad_exception()' can not be used when making a shared object; recompile with -fPIC

Таким образом, я предполагаю, что это использует нон версии ПОС , как я ожидал бы, основываясь на именовании по умолчанию. Как я могу дать ссылку на компоновщик использовать файл libstdC++ _ pic.a?

Update 1 _pic версия находится в 32 битном Gcc вложенной в /usr/lib/gcc/x86_64-linux-gnu/4.6/32, и я не вижу _pic версию в родительской папке, в которой 64-разрядные версии расположены. Похоже, что моя версия gcc не была скомпилирована с 64-битным статическим libstdC++.

Update 2 Я был в состоянии установить 64 битную версию libstdC++ _ pic.a, проверяя мою версию GCC, а затем установить пакет:

gcc --version gcc (Ubuntu/Linaro 4.6.3-1ubuntu5) 4.6.3 sudo apt-get install libstdc++6-4.6-pic

И теперь я вижу это в /usr/lib/gcc/x86_64-linux-gnu/4.6/. Все еще нужно выяснить, как сказать компоновщику, чтобы использовать его.

ответ

0

Возможно, я исправил это, передав опцию linker -nostdlib, а затем явно связав libstdC++ _ pic.

Однако, теперь я получаю следующее сообщение об ошибке:

version node not found for symbol std::basic_string<wchar_t, std::char_traits<wchar_t>, std::allocator<wchar_t> >::_M_move(wchar_t*, wchar_t const*, unsigned long)@@GLIBCXX_3.4.5

После исследования он появляется там, возможно, было ошибкой для статического libstdc 64bit ++ с ПИК, которая в настоящее время рассматривается в более новых версиях GCC (4.7.3). Это другой вопрос, имеет больше информации:

Compiling one shared library on Linux to target all distributions

+0

Продолжение: Я установил и переключился на GCC 4.7.3 на Ubuntu 12.04 (через хранилище тест ToolChain) и моя программа теперь ссылки и работает успешно, и я могу видеть что libstdC++ статически связан с общей библиотекой. Мне больше не приходилось использовать библиотеку libstdC++ _ pic, поскольку, по-видимому, по умолчанию она перемещается (-static-libstdC++ было достаточно). – Edward

Смежные вопросы