相关疑难解决方法(0)

如何正确地将库与cmake链接?

我无法使用我正在使用的其他库来正确链接到我的项目中.

我正在使用CLion,它使用cmake来构建它的项目.我试图将几个库与OpenGL结合使用来构建一些对象.我最初在Visual Studio中构建它,因为我无法弄清楚如何让cmake与Clion一起工作.但是,现在代码全部工作(无论如何都在Visual Studio中),我希望能够使用CLion,因为这是我首选的IDE.

我还是cmake的新手,我不明白我的错误CMakeLists.txt.这是我有的:

cmake_minimum_required(VERSION 3.3)
project(texture_mapping)
find_package(OpenGL REQUIRED)
link_directories(${OPENGL_gl_LIBRARY})

set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++11")

set(SOURCE_FILES main.cpp camera.h display.h display.cpp mesh.cpp mesh.h obj_loader.cpp obj_loader.h shader.cpp shader.h stb_image.c stb_image.h texture.cpp texture.h transform.h)

link_directories(texture_mapping ${PROJECT_SOURCE_DIR}/lib)

add_executable(texture_mapping ${SOURCE_FILES})

target_include_directories(texture_mapping PUBLIC ${PROJECT_SOURCE_DIR}/include)
target_link_libraries(texture_mapping SDL2 SDL2main SDL2test glew32 glew32s ${OPENGL_gl_LIBRARY})
Run Code Online (Sandbox Code Playgroud)

我调整它直到它没有在CLion中给我任何更多的错误,但我的代码仍然无法识别头文件.

这是我的项目的结构:
项目结构

所以,我放了我需要的所有库,但它似乎没有在代码中识别它们.Clion在项目中识别它们(它们没有出现错误的红色),但是当它构建时(当我尝试在CLion中运行它时),我得到这些错误:

CMakeFiles\texture_mapping.dir/objects.a(mesh.cpp.obj): In function `ZN4MeshD2Ev':
...texture-mapping/mesh.cpp:30: undefined reference to `_imp____glewDeleteVertexArrays'
CMakeFiles\texture_mapping.dir/objects.a(mesh.cpp.obj): In function `ZN4Mesh8InitMeshERK12IndexedModel':
...texture-mapping/mesh.cpp:36: undefined reference to `_imp____glewGenVertexArrays'
...texture-mapping/mesh.cpp:37: undefined reference to `_imp____glewBindVertexArray'
...texture-mapping/mesh.cpp:39: undefined reference to `_imp____glewGenBuffers'
...texture-mapping/mesh.cpp:40: undefined reference …
Run Code Online (Sandbox Code Playgroud)

c++ opengl cmake undefined-reference

29
推荐指数
1
解决办法
5万
查看次数

如何在cmake中使用SDL2和SDL_image

我在寻找编译使用C++程序最简单的方法SDL2SDL_image与cmake的.

经过几个小时的搜索后,这是我最好的尝试:

的CMakeLists.txt

project(shooter-cmake2)

cmake_minimum_required(VERSION 2.8)

set(SOURCES
shooter.cpp
classes.cpp
utils.cpp
)

set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++0x")

add_executable(${PROJECT_NAME} ${SOURCES})

INCLUDE(FindPkgConfig)
PKG_SEARCH_MODULE(SDL2 REQUIRED sdl2)
PKG_SEARCH_MODULE(SDL2_image REQUIRED sdl2_image)
INCLUDE_DIRECTORIES(${SDL2_INCLUDE_DIRS} ${SDL2IMAGE_INCLUDE_DIR})
TARGET_LINK_LIBRARIES(${PROJECT_NAME} ${SDL2_LIBRARIES} ${SDL2IMAGE_LIBRARY})
Run Code Online (Sandbox Code Playgroud)

我收到这些错误:

In function `loadTexture(std::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, SDL_Renderer*)':
undefined reference to `IMG_LoadTexture'
collect2: ld returned 1 exit status
Run Code Online (Sandbox Code Playgroud)

这是函数调用:

#include "SDL.h"
#include "SDL_image.h"

SDL_Texture* loadTexture(const std::string &file, SDL_Renderer *ren){
    SDL_Texture *texture = IMG_LoadTexture(ren, file.c_str());
    texture != nullptr or die("LoadTexture");
    return texture;
}
Run Code Online (Sandbox Code Playgroud)

我很绝望.请帮我!谢谢!:)

c++ sdl sdl-image cmake sdl-2

24
推荐指数
4
解决办法
5万
查看次数

将 SDL2 与 CMake 链接

我在将 SDL2 链接到我的项目时遇到问题,这可能是因为我是 CMake 的新手,我不完全知道如何用它创建新项目。我尝试解决此问题的每次和方法都会导致以下问题之一:

  1. “找不到 WinMain@16”
  2. 多个未定义的引用错误
  3. 对“SDL_main”的未定义引用

我尝试使用 find_package,直接链接到文件,链接到库文件,遵循教程(例如https://trenki2.github.io/blog/2017/06/02/using-sdl2-with-cmake/),寻找答案(他们中的大多数人谈论使用我无法开始工作的 find_package)(例如将 SDL2 与 CMake 一起使用)。

项目依赖

SDL 2.0.12、CMake 3.17.0、7-Zip、mingw32-make、wget

该项目应该是跨平台的,但主要的 devenv 是 Windows 10。所有脚本都从根文件夹“vivaria”运行。

项目结构

vivaria/
??? build/
?   ??? [cmake build files]
??? buildtools/
?   ??? SDL2/SDL2-2.0.12/lib/x86 (and x64)
?                            ??? SDL2.lib
?                            ??? SDL2main.libs
??? deploy/
??? resources/
??? scripts/
?   ??? build_windows_debug_x86.bat
?   ??? install_buildtools_windows.bat
??? src/
    ??? CMakeLists.txt
    ??? vivaria.cpp
Run Code Online (Sandbox Code Playgroud)

build_windows_debug_x86.bat

cmake -G "MinGW Makefiles" -S .\src\ -B .\build\ -DCMAKE_BUILD_TYPE=Debug
cd …
Run Code Online (Sandbox Code Playgroud)

c++ cmake sdl-2

3
推荐指数
1
解决办法
3896
查看次数

如何在CMake中链接SDL2?

我正在尝试在 ubuntu 上使用 sdl 。根据此说明(https://gist.github.com/BoredBored/3187339a99f7786c25075d4d9c80fad5)我安装了sdl2,sdl图像和sdl混合器。现在我必须在构建时将它们链接起来。下面的示例我应该如何做。

g++ myProgram.cpp -o myProgram `sdl2-config --cflags --libs` -lSDL2 -lSDL2_mixer -lSDL2_image -lSDL2_ttf
Run Code Online (Sandbox Code Playgroud)

我正在使用 Cmake,但我不知道如何链接它们......

下面的代码只是为了测试 sdl 是否工作而完成。

//MAIN
#include <iostream>
#include <SDL2/SDL.h>
#include <SDL2/SDL_image.h>
#include <SDL2/SDL_mixer.h>
#include <SDL2/SDL_ttf.h>

int main(int argc, char*args[])
{
 SDL_Init(SDL_INIT_EVERYTHING);
}

Run Code Online (Sandbox Code Playgroud)

下面的 CMakeList

# Set the minimum version of CMake that can be used
# To find the cmake version run
# $ cmake --version
cmake_minimum_required(VERSION 3.5)

# Set the project name
project (sdl)

# Create a sources variable with …
Run Code Online (Sandbox Code Playgroud)

c++ linker cmake

1
推荐指数
1
解决办法
8159
查看次数

标签 统计

c++ ×4

cmake ×4

sdl-2 ×2

linker ×1

opengl ×1

sdl ×1

sdl-image ×1

undefined-reference ×1