Ошибка при создании разделяемой библиотеки со статически связанной библиотекой libstdC++

Используя gcc 4.5.1 на 64-битной машине x86, я сначала создаю ao следующим образом: g++ -fPIC -c a.cc -o ao

затем попробуйте создать liba.so следующим образом: g ++ -static-libstdC++ -shared -W1,-soname,liba.so -o liba.so.1.0.0 ao

но не удалось, со следующей информацией: перемещение R_X86_64_32S против `vtable for __gnu_cxx::stdio_filebuf >'не может использоваться при создании общего объекта; перекомпилировать с -fPIC

Я пытаюсь перекомпилировать библиотеку libstdC++, с добавлением -fPIC, но все равно не получилось

2 ответа

Аналогичный вопрос по этой теме относится к stackru, который ссылается на внешний сайт о статическом линковании libstdC++.

Я ожидаю, что статическая библиотека libstdC++ не была собрана с -fPICи, следовательно, не могут быть связаны в общей библиотеке.

Теоретически вы можете поместить не динамический PIC-код в динамическую библиотеку, но он не будет совместимым (каждая программа, использующая его, должна иметь свою собственную копию), поэтому он часто не реализуется.

Вам нужно будет ссылаться на разделяемую библиотеку C++, сделать вашу собственную библиотеку статической библиотекой или же пересобрать libstdC++ самостоятельно и извлечь файлы.o из каталога сборки.

Другие вопросы по тегам