以下是完整的日志:
/tmp/ccCvErNZ.o: In function `YAML::detail::node& YAML::detail::node_data::get<std::string>(std::string const&, std::shared_ptr<YAML::detail::memory_holder>)':
cricket.cpp:(.text._ZN4YAML6detail9node_data3getISsEERNS0_4nodeERKT_St10shared_ptrINS0_13memory_holderEE[_ZN4YAML6detail9node_data3getISsEERNS0_4nodeERKT_St10shared_ptrINS0_13memory_holderEE]+0x94): undefined reference to `YAML::detail::node_data::convert_to_map(std::shared_ptr<YAML::detail::memory_holder>)'
collect2: error: ld returned 1 exit status
我要编译的代码很简单
#include <iostream>
#include <yaml-cpp/yaml.h>
using namespace std;
int main() {
YAML::Node test = YAML::LoadFile("test.yaml");
if (test["date"]) {
cout << "HELLO";
}
return 0;
}
我使用的YAML是http://www.yaml.org/start.html中的示例
如果我只是尝试加载YAML,它加载正常。但如果我尝试访问任何数据,我得到相同的错误。所以这不是一个链接问题。
编辑:我可以做像cout << test
和cout << test.type()
这样的事情和其他函数。我认为问题在于使用基于字符串的Map来访问内部节点。
7条答案
按热度按时间pkwftd7m1#
您似乎没有正确链接
yaml-cpp
库。请在编译时添加参数-lyaml-cpp
。例如:编辑
另一个选择是将此cmake包含到您的CMakeLists.txt中:
g6baxovj2#
我在Debian系统上编译OpenXcom时遇到了类似的情况,结果发现我混合使用了testing和stable包,yaml包来自stable,如果初始函数太多,这种组合会导致链接失败。
如果这就是您所遇到的(并且您也在使用Debian),请尝试使用编译器从stable编译源代码包
这个命令将为libyaml构建. deb包,然后你可以像这样用dpkg插入它们:
作为根用户。
从源代码编译libyaml会使它链接到你已经拥有的测试库,而不是期望稳定的库,所以应该可以解决上面的问题,至少对我来说是这样。
即使您不使用Debian,从源代码(例如tarball)编译yaml-cpp也可能出于类似的原因。
xkftehaa3#
确保这两个文件存在:
我的CMakeLists.txt:
yaml_cpp_test. cpp的内容与问题中提到的内容相同。
我尝试在vps(Ubuntu 14.04.1 LTS)上重现该问题
之后,yaml-cpp安装到/usr/local/lib和/usr/local/include
文件在我的工作目录:
当我试图运行“cmake ."时,出现了一些错误,因此我删除了
CMakeFiles/CMakeOutput.log
行,CMakeLists.txt的内容为:以下输出符合预期:
1l5u6lss4#
我确认某些版本的yaml-cpp库包含这个问题(这不是关于不正确的链接)。它相当脏,但是我已经通过在代码中定义空函数解决了它,看起来像
这种方法并不完美(例如,因为如果使用另一个库版本,它会导致重复)。
vmdwslir5#
在我的例子中,我在两台计算机上运行完全相同的代码,但只在其中一台计算机上给予错误,这几乎让我发疯。这不是编译错误,链接错误或其他什么,我认为代码是脏的或其他什么。
我尝试了所有选项:
1.使用
cmake ..
=〉make
=〉make install
从源头进行常规构建和安装1.与1相同,
CC=$(which gcc) CXX=$(which g++) cmake -DBUILD_SHARED_LIBS=ON ..
1.从apt卸载默认包(我使用ubuntu16.04)
都失败了,直到我找到了Ilya Golshtein的答案,然后在我的代码中,我将使用yaml-cpp,在
YAML::LoadFIle
行之前添加此代码jsut这是唯一有效的解决方案
jq6vz3qz6#
我已经迟到了,不知道我在做什么,但是对于那些使用Windows的人来说,确保你的IDE喜欢你的mingw-g++。我的自动默认为草莓Perl(?),当我把它改为mingw-g++时,一切都开始工作了。我想这与版本控制有关吧?
5ssjco0h7#
我也很困扰,我在yaml-cpp版本是“0.7.0”的时候遇到了这个问题,我用“0.6.0”解决了。