Проблема компоновщика Visual Studio 2005

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


person Community    schedule 24.07.2009    source источник


Ответы (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 ++ вам нужно перечислить оформленное имя каждого символа, что может быть проблемой.

person Nick Meyer    schedule 24.07.2009
comment
Это исправило это. Большое тебе спасибо! - person ; 24.07.2009