首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >对YAML::LoadFile的引用未定义

对YAML::LoadFile的引用未定义
EN

Stack Overflow用户
提问于 2014-03-03 13:16:12
回答 4查看 7.1K关注 0票数 4

我正在尝试使用新版本的libyaml-cpp,并遇到了链接器问题(undefined reference to 'YAML::LoadFile(std::basic_string<char, std::char_traits<char>, std::allocator<char> > const&)')。

我构建这个库的方法如下:

代码语言:javascript
复制
cmake -DBUILD_SHARED_LIBS=ON ..
make
sudo make install

然后,我将包含yaml-cpp/yaml.h并调用YAML::LoadFile( some_string );。我的编译代码行是:

代码语言:javascript
复制
g++ -L/usr/local/lib -I/usr/local/include -lyaml-cpp -std=c++0x -o $@  $^

我也尝试过将确切的.so文件放入其中,但没有成功。使用nm,我可以在共享库中看到一个LoadFile函数。我现在不知道是使用了错误的构建行,还是库出了什么问题。

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2014-03-03 13:33:50

这是一个命令行上的排序问题。我想我永远不会理解GCC的命令行逻辑。简单地将库放在末尾似乎是可行的:

代码语言:javascript
复制
g++ -L/usr/local/lib -I/usr/local/include -std=c++0x -o $@  $^ -lyaml-cpp
票数 8
EN

Stack Overflow用户

发布于 2019-05-28 04:34:47

支持新的yaml-cpp API。

代码语言:javascript
复制
find_package(PkgConfig)
pkg_check_modules(YAMLCPP REQUIRED yaml-cpp>=0.5)
include_directories(${YAMLCPP_INCLUDE_DIRS})

add_executable(name src/name.cpp)
target_link_libraries(name ${catkin_LIBRARIES}  ${YAMLCPP_LIBRARIES})
票数 1
EN

Stack Overflow用户

发布于 2019-08-03 18:43:08

我通过调整我的CMakeList.txt修复了这个问题

如上所述,我没有遇到任何问题:

代码语言:javascript
复制
 g++ -L/usr/local/lib -I/usr/local/include -std=c++0x main.cpp -lyaml-cpp

但是使用cmake和通过CLion构建对我来说失败了。

这个CMakeList.txt为我解决了这个问题(这只是一个最小的精简版本,但它应该会给出一个想法)。它假设您的系统上只安装了一个版本的yaml-cpp:

代码语言:javascript
复制
# Projekt Description / etc
cmake_minimum_required(VERSION 3.14)
project(yaml_cpp)
set(CMAKE_CXX_STANDARD 14)

# Declaration of package required
find_package(PkgConfig)
pkg_check_modules(YAMLCPP REQUIRED yaml-cpp>=0.5)

# Define the executable and link the yaml libs
add_executable(yaml_cpp main.cpp)
target_link_libraries(yaml_cpp ${YAMLCPP_LIBRARIES})

这是让事情运转起来的最简约的方式。我受到了上面Sinaí Aranda的启发。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/22139149

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档