ошибка компоновщика после компиляции - PullRequest
1 голос
/ 12 марта 2012

У меня проблема с компоновщиком, я думаю

Вот что я получаю на вкладке вывода:

1>main-light.obj : error LNK2019: unresolved external symbol _SDL_FreeSurface referenced in function "private: unsigned int __thiscall objloader::loadTexture(char const *)" (?loadTexture@objloader@@AAEIPBD@Z)
1>main-light.obj : error LNK2019: unresolved external symbol _SDL_LoadBMP_RW referenced in function "private: unsigned int __thiscall objloader::loadTexture(char const *)" (?loadTexture@objloader@@AAEIPBD@Z)
1>main-light.obj : error LNK2019: unresolved external symbol _SDL_RWFromFile referenced in function "private: unsigned int __thiscall objloader::loadTexture(char const *)" (?loadTexture@objloader@@AAEIPBD@Z)
1>main-light.obj : error LNK2019: unresolved external symbol _SDL_GetTicks referenced in function "public: void __thiscall Player::init(void)" (?init@Player@@QAEXXZ)
1>main-light.obj : error LNK2019: unresolved external symbol _SDL_GetKeyState referenced in function "void __cdecl Control(float,float,bool)" (?Control@@YAXMM_N@Z)
1>main-light.obj : error LNK2019: unresolved external symbol _SDL_WarpMouse referenced in function "void __cdecl Control(float,float,bool)" (?Control@@YAXMM_N@Z)
1>main-light.obj : error LNK2019: unresolved external symbol _SDL_GetMouseState referenced in function "void __cdecl Control(float,float,bool)" (?Control@@YAXMM_N@Z)
1>main-light.obj : error LNK2019: unresolved external symbol _SDL_ShowCursor referenced in function "void __cdecl Control(float,float,bool)" (?Control@@YAXMM_N@Z)
1>main-light.obj : error LNK2019: unresolved external symbol _SDL_Delay referenced in function _SDL_main
1>main-light.obj : error LNK2019: unresolved external symbol _SDL_GL_SwapBuffers referenced in function _SDL_main
1>main-light.obj : error LNK2019: unresolved external symbol _SDL_PollEvent referenced in function _SDL_main
1>main-light.obj : error LNK2019: unresolved external symbol _SDL_SetVideoMode referenced in function _SDL_main
1>main-light.obj : error LNK2019: unresolved external symbol _SDL_Init referenced in function _SDL_main
1>MSVCRT.lib(crtexe.obj) : error LNK2019: unresolved external symbol _main referenced in function ___tmainCRTStartup
1>C:\Users\Tiago\Desktop\Projects\FPS\Debug\FPS.exe : fatal error LNK1120: 14 unresolved externals

вот командная строка компоновщика (если он может вам помочь ...):

/OUT:"C:\Users\Tiago\Desktop\Projects\FPS\Debug\FPS.exe" /NOLOGO "SDL.lib" "SDLmain.lib" "glu32.lib" "glut32.lib" "opengl32.lib" "kernel32.lib" "user32.lib" "gdi32.lib" "winspool.lib" "comdlg32.lib" "advapi32.lib" "shell32.lib" "ole32.lib" "oleaut32.lib" "uuid.lib" "odbc32.lib" "odbccp32.lib" /MANIFEST /ManifestFile:"Debug\FPS.exe.intermediate.manifest" /ALLOWISOLATION /MANIFESTUAC:"level='asInvoker' uiAccess='false'" /DEBUG /PDB:"C:\Users\Tiago\Desktop\Projects\FPS\Debug\FPS.pdb" /SUBSYSTEM:CONSOLE /PGD:"C:\Users\Tiago\Desktop\Projects\FPS\Debug\FPS.pgd" /TLBID:1 /DYNAMICBASE /NXCOMPAT /MACHINE:X86 /ERRORREPORT:QUEUE 

Дополнительная информация: я поместил папку OpenGL и SDL (папку с файлами include и lib) в основную папку моего проекта. Это вызывает проблему?

1 Ответ

1 голос
/ 12 марта 2012

Я не могу найти что-либо релевантное в документации SDL о том, как правильно настроить ваш проект. Заголовочные файлы дают некоторые подсказки, для выбора платформы используются нестандартные #defines. Что объясняет первый набор ошибок компоновщика, макрос DECLSPEC должен быть установлен правильно. По какой-то действительно таинственной причине он хочет переименовать также и main (), причину вашей последней ошибки компоновщика. Понятия не имею, почему все это необходимо, такие хаки обычно используются в качестве фильтра. Например, «не могу понять это сам, не задавай нам других вопросов».

Первое, что вам нужно сделать: щелкнуть правой кнопкой мыши ваш проект, Свойства, Линкер, Дополнительно, Точка входа = SDL_main. Чтобы ваш код выглядел примерно так, я жестко запрограммировал пути и сказал компоновщику, что связывать:

include "stdafx.h"
#define __WIN32__    // Non-standard define to select the platform
#include "c:/temp/sdl-1.2.15/include/sdl.h"
#pragma comment(lib, "c:/temp/sdl-1.2.15/lib/x86/sdl.lib")


int main(int argc, char* argv[])
{
    SDL_Init(SDL_INIT_EVERYTHING);   // Just an example
    // etc...
    return 0;
}

Это правильно, вот и все, что я пытался. Для запуска требуется sdl.dll в той же директории, что и ваш .exe. Удачи вам, похоже, вам это понадобится.

...