我正在尝试使用新版本的libyaml-cpp,并遇到了链接器问题(undefined reference to 'YAML::LoadFile(std::basic_string<char, std::char_traits<char>, std::allocator<char> > const&)'
)。
我构建这个库的方法如下:
cmake -DBUILD_SHARED_LIBS=ON ..
make
sudo make install
然后,我将包含yaml-cpp/yaml.h
并调用YAML::LoadFile( some_string );
。我的编译代码行是:
g++ -L/usr/local/lib -I/usr/local/include -lyaml-cpp -std=c++0x -o $@ $^
我也尝试过将确切的.so
文件放入其中,但没有成功。使用nm
,我可以在共享库中看到一个LoadFile
函数。我现在不知道是使用了错误的构建行,还是库出了什么问题。
发布于 2014-03-03 13:33:50
这是一个命令行上的排序问题。我想我永远不会理解GCC的命令行逻辑。简单地将库放在末尾似乎是可行的:
g++ -L/usr/local/lib -I/usr/local/include -std=c++0x -o $@ $^ -lyaml-cpp
发布于 2019-05-28 04:34:47
支持新的yaml-cpp API。
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})
发布于 2019-08-03 18:43:08
我通过调整我的CMakeList.txt
修复了这个问题
如上所述,我没有遇到任何问题:
g++ -L/usr/local/lib -I/usr/local/include -std=c++0x main.cpp -lyaml-cpp
但是使用cmake和通过CLion构建对我来说失败了。
这个CMakeList.txt
为我解决了这个问题(这只是一个最小的精简版本,但它应该会给出一个想法)。它假设您的系统上只安装了一个版本的yaml-cpp:
# 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的启发。
https://stackoverflow.com/questions/22139149
复制相似问题