«Если рабочий хочет хорошо выполнять свою работу, он должен сначала заточить свои инструменты» — Конфуций, «Аналитики Конфуция. Лу Лингун»
титульная страница > программирование > Как устранить ошибки «Неопределенная ссылка на» при связывании статических библиотек C с кодом C++?

Как устранить ошибки «Неопределенная ссылка на» при связывании статических библиотек C с кодом C++?

Опубликовано 8 ноября 2024 г.
Просматривать:116

How to Resolve \

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

При попытке связать статическую библиотеку C с кодом C вы можете возникают ошибки «неопределенная ссылка на», несмотря на изменение порядка ссылок. Эта проблема возникает из-за разных имен символов, созданных компиляцией C и C, известных как «искажение имен».

В C компоновщик отображает имена расчлененных символов в сообщениях об ошибках, что может сбивать с толку. Проверка объектного файла (*.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
Заявление о выпуске Эта статья перепечатана по адресу: 1729663094. В случае каких-либо нарушений, пожалуйста, свяжитесь с [email protected], чтобы удалить ее.
Последний учебник Более>

Изучайте китайский

Отказ от ответственности: Все предоставленные ресурсы частично взяты из Интернета. В случае нарушения ваших авторских прав или других прав и интересов, пожалуйста, объясните подробные причины и предоставьте доказательства авторских прав или прав и интересов, а затем отправьте их по электронной почте: [email protected]. Мы сделаем это за вас как можно скорее.

Copyright© 2022 湘ICP备2022001581号-3