Я пытаюсь скомпилировать некоторый код, который использует функцию, реализованную в статической библиотеке с именем staticlib.a. У меня также есть заголовок с именем staticlib.h, который содержит объявление этой функции. Мое основное, которое содержится в файле main.c, который включает staticlib.h, только вызывает эту функцию и ничего больше. Поэтому я собираю с
gcc main.c staticlib.a
и все работает нормально. Мне нужна некоторая особенность c ++, но если я правильно изменю main.c в main.cpp и скомпилирую таким же образом
gcc main.cpp staticlib.a
произошла неопределенная ссылка на мою функцию. Как я могу сделать это работает? И почему эта проблема возникла? Я не могу найти объяснение ни на одном из посещенных мной сайтов …
Спасибо за все ответы.
Вы должны определить функцию в библиотеке как функцию ‘C’, а не функцию C ++ — сделайте это в вашем main.cpp
extern "C"{
#include "staticlib.h"}
C и C ++ компилируются по-разному, C ++ использует искажение имени (встраивание информации о типе C ++ в объектный файл). Чтобы остановить это поведение и ссылаться на код C из C ++, вы можете использовать синтаксис extern C в C ++ при включении заголовочного файла C.
Пожалуйста, смотрите здесь
http://www.cplusplus.com/forum/general/1143/