Я работаю над файлом решения (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 (в свойствах проекта).
Итак, поехали. Есть идеи?