Проблема с Visual Studio 2005 Linker

Я в основном новичок в Visual Studio, поэтому прошу прощения, если это основная проблема. У меня есть решение, которое содержит ряд проектов. В проекте A у меня есть уже существующий набор файлов, в который я добавил новый класс. Проект B использует функциональность, закодированную в этом новом классе в Project A. Сначала создается проект A, и создается файл.lib, и этот файл.lib связывается с проектом B. Однако, когда я иду, чтобы создать файл.lib для Project B I получим ошибку ссылки, ссылаясь на новые функции в Project A, которые я добавил. Используя команду dumpbin с файлом.lib, сгенерированным из Проекта A, я заметил, что символов для добавленных мной функций там нет. Однако файл.obj, созданный после компиляции нового класса в Project A, содержит эти символы. Есть идеи, почему эти символы не присутствуют в файле.lib проекта А?

1 ответ

Я предполагаю, что это оба проекта DLL. В Windows вам нужно либо экспортировать символы, украсив их __declspec(dllexport)или вам нужно использовать файл.DEF, чтобы указать, какие символы экспортировать.

С __declspecобычно это достигается созданием заголовка примерно так:

#ifdef PROJECT_A_EXPORTS
#define PROJECT_A_API __declspec(dllexport)
#else
#define PROJECT_A_API __declspec(dllimport)
#endif

Затем, когда вы хотите экспортировать всех членов класса, вы пишете:

class PROJECT_A_API MyClass
{
   // ...
};

И определить PROJECT_A_EXPORTS при компиляции проекта A, но не проекта B. Таким образом, вы можете использовать один и тот же заголовочный файл MyClass.h для обоих проектов. При компиляции проекта A вы будете экспортировать символы, а при компиляции проекта B вы будете импортировать символы.

Вот некоторая информация о маршруте файла DEF. Однако это может быть трудно поддерживать, и в C++ вам нужно перечислить оформленное имя каждого символа, что может быть проблемой.

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