Связывание проблем в решении Multiproject Visual Studio 2005 - PullRequest
0 голосов
/ 15 августа 2010

Я работаю над файлом решения (VS 2005), который содержит несколько проектов.

На данный момент есть два моих проекта - один называется core, а другой - log.

Основной проект - это запускаемый проект, а в проекте журнала отмечены галочки в зависимости от проекта.

У меня есть два файла в основном проекте - AB.h (объявления) и AB.cpp (определения)

Многие другие файлы cpp из основного проекта ссылаются на AB.h и не имеют проблем с поиском определений в AB.cpp.

Теперь возникает проблема. У меня есть cpp файл с именем CD.cpp в проекте журнала, который требует ссылки на AB.h. Я добавил каталог включения AB.h как в основной, так и в лог проекты (AB.cpp также находится в одной папке)

Кроме того, у проекта журнала есть $ (OutDir) в параметре «Дополнительные каталоги библиотек» в части настроек проекта Linker. Также добавили «core.lib» в поле «Дополнительные зависимости» в «Свойства-> Linker-> Ввод

».

Базовый проект компилируется в dll, но в той же папке есть и файл core.lib среди прочего барахла. Решение скомпилировано как версия Release.

В CD.cpp, когда я щелкаю правой кнопкой мыши по строке #include "AB.h", я перехожу к файлу .h в папке core. Пока все хорошо. Однако, когда я пытаюсь скомпилировать решение, проект журнала не собирается должным образом, показывая эти две ошибки компоновщика.

log.obj: ошибка LNK2001: неразрешенный внешний символ «class myNamespace :: myClass myInstance» (? MyInstance @@ 3VmyClass @ myNamespace @@ A)

log.obj: ошибка LNK2001: неразрешенный внешний символ "bool infFlag" (? InfFlag @@ 3_NA)

Класс является частью h-файла, включенного в AB.h (экземпляр объявлен в AB.cpp и включен как extern в CD.cpp. InfFlag объявлен в AB.cpp и объявлен в CD.cpp как extern.

Что я должен сделать, чтобы лог-файл создавался правильно? Спасибо


OK. Вам, ребята, нужно больше деталей. Конечно.

Один файл решения. Несколько проектов.

[Core]

включает AB.h и AB.cpp

-AB.h

- включает EF.h из внешней библиотеки (функции из этой библиотеки работают правильно для файлов в том же основном проекте).

- объявляет некоторые функции

-AB.cpp

- определяет те функции, которые были объявлены в AB.h

- некоторые другие файлы cpp, которые могут без проблем использовать эти функции из AB.h

[/ Core]

[Журнал -> Зависимости проекта -> Основные]

-Нет файлов

-CD.cpp

- требует AB.h для работы. Включен в команду #include и правильно связан (я могу щелкнуть правой кнопкой мыши и нажать «открыть файл», чтобы открыть настоящий файл .h)

- использует функции из AB.h

[/ Log]

Надеюсь, это поможет вам понять структуру проекта в моем решении.

Проблема возникает при компиляции проекта журнала. Это всегда приводит к ошибке ссылки для любых ссылок на функции в AB.h, говоря «неразрешенный внешний символ». Я предполагаю, что это происходит потому, что он не может найти определения для функций, объявленных в AB.h (возможно, потому что это другой проект). Поскольку журнал зависит от ядра, и ядро ​​будет скомпилировано с того времени, я добавил в $ (OutputDir) каталоги библиотеки (и ядро, и журнал, встроенные в один каталог), чтобы он мог найти core.lib, а также добавил "ядро .lib "to" Дополнительные зависимости "на вкладке" Вход "в Linker (в свойствах проекта).

Итак, поехали. Есть идеи?


1 Ответ

0 голосов
/ 15 августа 2010

Кроме того, в проекте журнала есть параметр $ (OutDir) в параметре «Дополнительные каталоги библиотек» в части настроек проекта Linker.

Возможно, это неправильно.Это должен быть тот каталог, где находится «core.lib», $(OutDir) - это место, куда будет помещен log.

Класс является частью файла h, включенного в AB.h (экземпляр, объявленный в AB.cpp и включенный как extern в CD.cpp. infFlag объявлен в AB.cpp и объявлен в CD.cpp как extern.

Так где же определения?

...