Я недавно начал создавать игровой движок и пару демо-версий игр, чтобы помочь создать двигатель, поэтому на этом этапе он все еще ОЧЕНЬ прост. Двигатель построен как статический lib и связан с игровым проектом. Я использую Visual Studio Express 2012.Почему я вдруг получаю нерешенные внешние символы, ссылающиеся на мой игровой движок из игрового проекта
Несколько часов назад я попытался добавить исходные файлы TinyXML в свой движок. Двигатель построен хорошо, но когда я построил проект я начал получать неразрешенные внешние символы из моей main.cpp ссылающейся функции в моем двигателе, которые работали, так как я начал это:
2>main.obj : error LNK2019: unresolved external symbol "public: static class AshEngine::SystemManager & __cdecl AshEngine::SystemManager::GetInstance(void)" ([email protected]@[email protected]@[email protected]) referenced in function _main
2>main.obj : error LNK2019: unresolved external symbol "public: bool __thiscall AshEngine::SystemManager::Start(class AshEngine::AshGame *,char const *,int,int)" ([email protected]@[email protected]@[email protected]@[email protected]) referenced in function _main
Вот мое главное:
int main(int argc, const char** argv)
{
Game* game = new Game();
bool success = AshEngine::SystemManager::GetInstance().Start(game, "Monopoly", SCREEN_WIDTH, SCREEN_HEIGHT);
return 0;
}
Я попытался восстановить, очистить, перезагрузить ПК, дважды проверить включение lib, добавив и папку lib в VCC-каталоги И указав lib непосредственно в «Additional Dependencies». Я изменил все свои изменения (вручную, поскольку у меня нет контроля версий на моем ПК), что я теперь исправлю: /), я протестировал его на трех игровых демо-проектах, используя тот же движок, и я создал новый проект с использованием движка, и все они имеют одинаковую проблему.
Когда я включаю подробное ведение журнала ссылок, я заметил, что мой движок lib появляется под «Неиспользуемые библиотеки». Я попытался включить/OPT: флаг компоновщика NOREF, но это не помогло.
Я в затруднении относительно того, почему он не может найти эти 2 символа. Как-то я сломал свой движок при добавлении TinyXML. У меня возникло ощущение, что я использовал все определения препроцессора, когда я попытался добавить TIXML_USE_STL в «Все конфигурации». Я прочитал WIN32, _DEBUG и _CONSOLE, но не уверен, что еще могло быть. После этого я обязательно установлю исходный контроль, чтобы я мог отменить изменения.
В то же время, как я могу понять, почему мой проект не может найти эти символы?
Где реализуется 'AshEngine :: SystemManager :: GetInstance'? –
Lol Raymond - он реализован внутри PLATFORM_WIN32 ifdef .... который был отключен, когда я случайно удалил мои определения препроцессора .... снова добавлен, и теперь все хорошо. Спасибо, что заставил меня посмотреть там. 3 часа в пути :( –