NS: получил небезопасный ответ; родитель указывает, что это должно быть безопасно

Но все хорошо работает с другими программами на 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
14
задан Jorre 12 November 2012 в 10:34
поделиться