如何使用Visual Studio 2019在cmake项目中使用库(dll / lib)

问题描述 投票:0回答:1

我有两个库,我正在尝试使用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)

c++ cmake sdl-2
1个回答
0
投票

所以我想通了。在Visual Studio中使用cmake构建sdl2源代码会产生3件事:SDL2(共享库),SDL2main(静态库)和SDL2-static(静态库)。

我正在使用此

target_link_libraries(SDLReactGame "SDL2") 

据我所知是什么构建了dll文件,我应该一直使用此文件

target_link_libraries(SDLReactGame "SDL2-static" "SDL2main")

链接到两个静态库,摆脱了我的lnk错误。

我猜您没有链接到dll文件,但是可能在构建项目的二进制文件夹中需要它们

© www.soinside.com 2019 - 2024. All rights reserved.