Связать статическую библиотеку с файлом.cpp

Я пытаюсь скомпилировать некоторый код, который использует функцию, реализованную в статической библиотеке с именем staticlib.a. У меня также есть заголовок с именем staticlib.h, который содержит объявление этой функции. Мое основное, которое содержится в файле main.c, который включает staticlib.h, только вызывает эту функцию и ничего больше. Поэтому я компилирую с gcc main.c staticlib.a и все работает нормально. Мне нужна некоторая особенность C++, но если я правильно изменю main.c в main.cpp и скомпилирую так же, gcc main.cpp staticlib.a произойдет неопределенная ссылка на мою функцию. Как я могу сделать это работает? И почему эта проблема возникла? Я не могу найти объяснение ни на одном сайте, который я посетил... Спасибо за все ответы.

2 ответа

Решение

Вы должны определить функцию в библиотеке как функцию '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/

Другие вопросы по тегам