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