我无法使用我正在使用的其他库来正确链接到我的项目中.
我正在使用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++程序最简单的方法SDL2和SDL_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)
我很绝望.请帮我!谢谢!:)
我在将 SDL2 链接到我的项目时遇到问题,这可能是因为我是 CMake 的新手,我不完全知道如何用它创建新项目。我尝试解决此问题的每次和方法都会导致以下问题之一:
我尝试使用 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)
cmake -G "MinGW Makefiles" -S .\src\ -B .\build\ -DCMAKE_BUILD_TYPE=Debug
cd …Run Code Online (Sandbox Code Playgroud) 我正在尝试在 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)