LNK2001 & LNK1120 при включении DLL в проект - MSVC ++ - PullRequest
1 голос
/ 02 февраля 2012

У меня есть DLL и файл lib. Я включил их в корневой каталог исходного кода и добавил ссылку на lib через Дополнительные зависимости. Однако я получаю следующую ошибку:

1>main.obj : error LNK2001: unresolved external symbol "class game::c_State game::state" (?state@game@@3Vc_State@1@A)
fatal error LNK1120: 1 unresolved externals

, который будет ссылаться на это из "engine.h":

extern __declspec(dllexport) c_State state;

В "state.cpp" (из источника DLL) он объявлен как

namespace game
{
    c_State state;
    //clipped for relevance
}

Может ли быть так, что мне нужно разместить DLL где-то конкретно? Винда знает где искать? Я не нашел в свойствах нигде конкретно ссылки на файл DLL, только файл lib.

Кроме того, нужен ли __declspec (dllexport) при объявлении переменных или только функций?

Заранее спасибо!

1 Ответ

1 голос
/ 02 февраля 2012

Вы должны применить __declspec (dllexport) к определению, а не к объявлению.Кроме того, для объявления требуется __declspec (dllimport) в другом проекте.Так в файле .h:

#undef EXPORT
#ifdef FOO_EXPORTS
#  define EXPORT __declspec(dllexport)
#else
#  define EXPORT __declspec(dllimport)
#endif

extern EXPORT int shared;

В файле исходного кода DLL:

__declspec(dllexport) int shared;

А в проекте DLL используйте Project + Properties, C / C ++, Proprocessor.Добавьте FOO_EXPORTS к определениям препроцессора.

...