Но все хорошо работает с другими программами на C, связывающими эту библиотеку.
blockquote>Вы заметили, что компиляция C и C ++ создает разные имена символов на уровне объектных файлов? Он называется ' mangling '. Компонент (C ++) будет показывать неопределенные ссылки в виде сообщенных символов в сообщении об ошибке, что может смутить вас. Если вы проверите свой файл
test.o
с помощьюnm -u
, вы увидите, что ссылочные имена символов не совпадают с именами, указанными в вашей библиотеке.Если вы хотите использовать функции, связанные как внешние, которые были скомпилированы с использованием простого компилятора C, вам понадобятся их объявления функций, заключенные в блок
extern "C" {}
, который подавляет кодирование имени C ++ для всего, что было объявлено или определено внутри, например:extern "C" { #include
#include } Еще лучше, вы может обернуть ваши объявления функций в ваши файлы заголовков следующим образом:
#if defined (__cplusplus) extern "C" { #endif /* * Put plain C function declarations here ... */ #if defined (__cplusplus) } #endif