如何在 Ubuntu 16.10 上使用 Conan 和 SDL2 解决未定义的引用错误?
How can I solve undefined reference errors with Conan and SDL2 on Ubuntu 16.10?
我正在尝试获取 conan working in a test project by following their Geting Started guide 以便我可以开始在实际项目中使用它。我正在尝试在 Ubuntu 16.10 x64 上用 g++ 编译的 C++ 项目中使用 SDL2 和 glew。
我的 conanfile.txt 看起来像这样:
[requires]
SDL2/2.0.5@lasote/stable
glew/2.0.0@coding3d/stable
[generators]
cmake
我的 CMakeLists.txt 文件如下所示:
project(conantest)
cmake_minimum_required(VERSION 3.5)
set(CMAKE_CXX_STANDARD 11)
include(conan/conanbuildinfo.cmake)
conan_basic_setup()
set(SRC_FILES main.cpp Display.cpp)
add_executable(conantest ${SRC_FILES})
我的项目包含一个包含 CMakeLists.txt、conanfile.txt、我所有源代码的目录、一个 Cmake 构建目录、一个 Conan 目录和一个 rebuild.sh。每当我对构建环境进行更改时,我都会使用这个 rebuild.sh 脚本来清理和构建项目(rm -r's,虽然它一旦工作就不是最佳的,但它确保以前设置中的任何错误都被删除一次我尝试修复)。
我的 rebuild.sh 看起来像这样:
rm -r ./build/*
rm -r ./conan/*
cd conan
conan install ..
cd ../build
cmake ..
make
当我 运行 这个脚本时,似乎一切正常,直到
链接最终可执行文件。发生这种情况时,我得到 Display.cpp:(.text+0x8a): undefined reference to `SDL_Init'
。为了解决这个问题,我尝试了解决方案 and 。虽然这些不是特定于 SDL 的,但我无法找到任何特定的资源。
Here 是我正在使用的完整环境的 zip 文件,包括 MCVE。
您需要自己告诉 CMake link 来对抗库,因为 conanbuildinfo.cmake
无法知道您的目标名称。
只需将此行添加到 CMakeLists.txt
文件的底部即可:
conan_target_link_libraries(conantest)
此命令将为 conan 文件中指定的所有依赖项调用 target_link_libraries。
这是另一个 CMakeLists.txt
示例,如果您想使用更多 "modern" CMake 方法,它更侧重于目标而不是全局设置:
cmake_minimum_required(VERSION 3.5)
project(conantest)
include(conan/conanbuildinfo.cmake)
conan_basic_setup(TARGETS)
add_executable(conantest main.cpp Display.cpp)
set_property(TARGET conantest PROPERTY CXX_STANDARD 11)
target_link_libraries(conantest CONAN_PKG::SDL2 CONAN_PKG::glew)
我正在尝试获取 conan working in a test project by following their Geting Started guide 以便我可以开始在实际项目中使用它。我正在尝试在 Ubuntu 16.10 x64 上用 g++ 编译的 C++ 项目中使用 SDL2 和 glew。
我的 conanfile.txt 看起来像这样:
[requires]
SDL2/2.0.5@lasote/stable
glew/2.0.0@coding3d/stable
[generators]
cmake
我的 CMakeLists.txt 文件如下所示:
project(conantest)
cmake_minimum_required(VERSION 3.5)
set(CMAKE_CXX_STANDARD 11)
include(conan/conanbuildinfo.cmake)
conan_basic_setup()
set(SRC_FILES main.cpp Display.cpp)
add_executable(conantest ${SRC_FILES})
我的项目包含一个包含 CMakeLists.txt、conanfile.txt、我所有源代码的目录、一个 Cmake 构建目录、一个 Conan 目录和一个 rebuild.sh。每当我对构建环境进行更改时,我都会使用这个 rebuild.sh 脚本来清理和构建项目(rm -r's,虽然它一旦工作就不是最佳的,但它确保以前设置中的任何错误都被删除一次我尝试修复)。
我的 rebuild.sh 看起来像这样:
rm -r ./build/*
rm -r ./conan/*
cd conan
conan install ..
cd ../build
cmake ..
make
当我 运行 这个脚本时,似乎一切正常,直到
链接最终可执行文件。发生这种情况时,我得到 Display.cpp:(.text+0x8a): undefined reference to `SDL_Init'
。为了解决这个问题,我尝试了解决方案
Here 是我正在使用的完整环境的 zip 文件,包括 MCVE。
您需要自己告诉 CMake link 来对抗库,因为 conanbuildinfo.cmake
无法知道您的目标名称。
只需将此行添加到 CMakeLists.txt
文件的底部即可:
conan_target_link_libraries(conantest)
此命令将为 conan 文件中指定的所有依赖项调用 target_link_libraries。
这是另一个 CMakeLists.txt
示例,如果您想使用更多 "modern" CMake 方法,它更侧重于目标而不是全局设置:
cmake_minimum_required(VERSION 3.5)
project(conantest)
include(conan/conanbuildinfo.cmake)
conan_basic_setup(TARGETS)
add_executable(conantest main.cpp Display.cpp)
set_property(TARGET conantest PROPERTY CXX_STANDARD 11)
target_link_libraries(conantest CONAN_PKG::SDL2 CONAN_PKG::glew)