2014-01-29 2 views
1

Я недавно начал создавать игровой движок и пару демо-версий игр, чтобы помочь создать двигатель, поэтому на этом этапе он все еще ОЧЕНЬ прост. Двигатель построен как статический 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, но не уверен, что еще могло быть. После этого я обязательно установлю исходный контроль, чтобы я мог отменить изменения.

В то же время, как я могу понять, почему мой проект не может найти эти символы?

+1

Где реализуется 'AshEngine :: SystemManager :: GetInstance'? –

+0

Lol Raymond - он реализован внутри PLATFORM_WIN32 ifdef .... который был отключен, когда я случайно удалил мои определения препроцессора .... снова добавлен, и теперь все хорошо. Спасибо, что заставил меня посмотреть там. 3 часа в пути :( –

ответ

1

Реализация символов были внутри #ifdef, который я случайно удалили из определений препроцессора/Facepalm