繁体   English   中英

如何在Ubuntu 16.10上使用Conan和SDL2解决未定义的参考错误?

[英]How can I solve undefined reference errors with Conan and SDL2 on Ubuntu 16.10?

我试图让柯南按照在测试项目中工作的葛亭入门指南 ,这样我就可以开始在实际项目中使用它。 我正在Ubuntu 16.10 x64上用g ++编译的C ++项目中尝试使用SDL2。

我的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,尽管一旦运行欠佳,它就可以确保一旦我尝试就消除了先前设置中的所有错误)修复)。

我的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' 为了解决这个问题,我在这里这里尝试了解决方案。 尽管这些不是特定于SDL的,但我找不到任何资源。

是我正在使用的完整环境(包括MCVE)的zip文件。

您需要告诉CMake自己链接到库,因为conanbuildinfo.cmake无法知道目标的名称。

只需将此行添加到CMakeLists.txt文件的底部即可使用:

conan_target_link_libraries(conantest)

此命令将调用target_link_libraries在conanfile指定的所有依赖关系。

如果您想使用更“现代”的CMake方法,而该方法更多地关注目标而不是全局设置,则这是另一个CMakeLists.txt示例:

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)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM