Я видел множество вопросов и ответов для людей с библиотеками C, связывающимися с C ++, или библиотеками C ++, связывающимися с C ... Однако у меня есть библиотека C ++, связывающаяся с C ++, и у меня появляются те же симптомы, что и у людей, смешивающих C и C ++ вместе (неопределенная ссылка при связывании).
Это моя строка g ++:
g++ -L C:/MyLibraries mycode.cpp -shared -o mycode.dll -lopengl32 -lglu32 -lgdi32 -lMyLibrary
Каждый ответ, с которым я сталкивался до сих пор, говорит о том, что мой заголовок обернут следующим образом:
#ifdef __cplusplus
extern "C" {
#endif
...
#ifdef __cplusplus
}
#endif
Тем не менее, моя библиотека на чистом C ++, 100% классы, нет глобальных функций, ничего, что extern "C" может нарушить (не может extern "C" для методов в классах, и упаковывает весь набор классов с extern "C" ничего не делает ... все еще неопределенные ссылки при связывании).
MyLibrary.lib был написан в Visual Studio 2010. И я написал много библиотек, используя Visual Studio 2005 и 2008. Ни одному из них никогда не требовалось добавлять extern «C» для любой из них, чтобы статически связать их с другой Visual Studio. основанные проекты. Библиотеки C ++, связанные с другим проектом C ++, без проблем, когда-либо.
Это то, что Visual Studio заботится о том, что g ++ не делает? Я могу статически связать большое количество моих собственных статических библиотек C ++ вместе с другими проектами C ++, и это просто работает. Является ли Visual Studio достаточно умным, чтобы расшифровывать искажение имен собственных методов C ++, поэтому я никогда не сталкивался с этим до сих пор? Но g ++ не знает, что делать, заставляя требовать соглашения об именах C (хотя я на 100% C ++ со всех сторон)?
Или проблема в том, что, хотя я использую g ++, он все еще применяет некоторые стандартные правила C? Что-то не так с моей командной строкой g ++?
Даже поиск ответа в MSDN по экспорту функций DLL делает его более похожим на то, что у меня просто что-то не так с моей строкой g ++, потому что их ссылки имеют такие темы, как «Экспорт функций C в исполняемые файлы C ++» и «Экспорт C ++». «Функции в исполняемые файлы C», где нигде не упоминается ссылка «Экспорт функций C ++ в исполняемые файлы C ++» ... Я попробовал __declspec (dllexport) для своих функций, которые компилировались, но до сих пор не определено связывание с g ++. Есть идеи?
Спасибо.