我有两个库,我正在尝试使用SDL2和ReactPhysics3D。到目前为止,我只是想让SDL2源代码在我的项目的子目录中进行编译,并在简单的c ++程序中使用它,但是我遇到了链接错误。
我的文件结构是
-SDLReactGame
-SDL2-2.0.12(source downloaded from libsdl.org)
-ReactPhysics3D(source downloaded from reactphysics3d.com)
-src
-Game.cpp
-CMakeLists.txt
CMakeLists.txt的内容如下
# CMakeList.txt : Top-level CMake project file, do global configuration
# and include sub-projects here.
cmake_minimum_required (VERSION 3.10)
set(PROJECT_NAME SDLReactGame)
set(PROJECT_VERSION_MAJOR 1)
set(PROJECT_VERSION_MINOR 0)
set(PROJECT_VERSION "${PROJECT_VERSION_MAJOR}.${PROJECT_VERSION_MINOR}")
# set the project name and version
project(${PROJECT_NAME} VERSION ${PROJECT_VERSION})
# specify the C++ standard
set(CMAKE_CXX_STANDARD 11)
set(CMAKE_CXX_STANDARD_REQUIRED True)
# Include sub-projects.
add_subdirectory (SDL2-2.0.12)
#add_subdirectory (reactphysics3d-0.7.1)
# add the executable
add_executable(${PROJECT_NAME} src/Game.cpp)
target_link_libraries(${PROJECT_NAME} "SDL2")
我相信我在某个地方缺少此功能,但我以几种不同的方式尝试过,但是运气不太好。似乎sdl项目中的include文件夹在构建时未将其放入out文件夹。
target_include_directories
这是我的Game.cpp,如果我注释掉除返回0以外的所有内容;并只包含SDL.h我得到了错误。我也没有cmake编译了它,并使其运行。我希望可以在同一个库中使用
#include "SDL.h"
int main(int argc, char *argv[])
{
/*SDL_Init(SDL_INIT_VIDEO);
SDL_Window *window = SDL_CreateWindow(
"SDL2Test",
SDL_WINDOWPOS_UNDEFINED,
SDL_WINDOWPOS_UNDEFINED,
640,
480,
0
);
SDL_Renderer *renderer = SDL_CreateRenderer(window, -1, SDL_RENDERER_SOFTWARE);
SDL_SetRenderDrawColor(renderer, 0, 0, 0, SDL_ALPHA_OPAQUE);
SDL_RenderClear(renderer);
SDL_RenderPresent(renderer);
SDL_Delay(3000);
SDL_DestroyWindow(window);
SDL_Quit();*/
return 0;
}
错误消息:
严重性代码描述项目文件行抑制状态
错误LNK1120 1未解决的外部.. \ out \ build \ x64-Debug \ SDLReactGame .. \ out \ build \ x64-Debug \ SDLReactGame.exe
错误LNK2019无法解析的外部符号主要在函数“ int __cdecl invoke_main(void)”中引用(?invoke_main @@ YAHXZ).. \ out \ build \ x64-Debug \ SDLReactGame .. \ out \ build \ x64-Debug \ MSVCRTD .lib(exe_main.obj)
所以我想通了。在Visual Studio中使用cmake构建sdl2源代码会产生3件事:SDL2(共享库),SDL2main(静态库)和SDL2-static(静态库)。
我正在使用此
target_link_libraries(SDLReactGame "SDL2")
据我所知是什么构建了dll文件,我应该一直使用此文件
target_link_libraries(SDLReactGame "SDL2-static" "SDL2main")
链接到两个静态库,摆脱了我的lnk错误。
我猜您没有链接到dll文件,但是可能在构建项目的二进制文件夹中需要它们