Связывание статической библиотеки c ++ с библиотекой c - PullRequest
1 голос
/ 09 ноября 2011

Я написал некоторый код (статическую библиотеку) на c ++, с (я так думаю, совместимость с C - получил 'extern C' и т. Д.), А затем я хотел использовать его в своем приложении на C.

Когда я запускаю свое приложение C, я получаю сообщение об ошибке:

undefined symbol: _ZTISt9exception

код c ++ был скомпилирован с помощью gcc с: -std=c++0x -lstdc++ flags

тогда, на obj файлах я запускаю ar

Полагаю, этот символ взят прямо из библиотеки C ++. Когда я компилирую свое приложение C, я, конечно, добавляю свою библиотеку C ++ в мой make-файл, и компиляция завершается без ошибок.

Что может быть не так?

Спасибо за помощь

Ответы [ 2 ]

1 голос
/ 09 ноября 2011

Статическая библиотека не связана, это просто набор объектных файлов в архиве. Все имена файлов, такие как libxxx.a, являются статическими библиотеками, а файлы с именами, такими как libyyy.so, являются динамическими библиотеками.

Это означает, что внешние символы в вашей библиотеке никогда не разрешаются, пока вы не свяжетесь с ней для создания исполняемого файла. Затем вам также понадобятся все библиотечные файлы, необходимые вашей библиотеке.

1 голос
/ 09 ноября 2011

Вам нужно будет связать конечный исполняемый файл с библиотекой времени выполнения C ++ (-lstdc++); при компиляции объектов C ++ он не действует, он только связывает исполняемый файл.

...