c – 相同的代码,相同的库版本,相同的编译器,不同的输出
发布时间:2020-12-16 07:24:08 所属栏目:百科 来源:网络整理
导读:文件h.cpp #include "yaml-cpp/yaml.h"#include iostreamint main() { YAML::Node node = YAML::Load("[1,2,3]"); std::cout node "n"; std::cout node.Type() "n"; std::cout node.IsSequence() "n";} 编译和执行 g++ -lyaml-cpp h.cpp ./a.out 产量 [1,
文件h.cpp
#include "yaml-cpp/yaml.h" #include <iostream> int main() { YAML::Node node = YAML::Load("[1,2,3]"); std::cout << node << "n"; std::cout << node.Type() << "n"; std::cout << node.IsSequence() << "n"; } 编译和执行 g++ -lyaml-cpp h.cpp && ./a.out 产量 [1,3] 3 1 在我的桌面上,但是 [1,3] 1 0 在我的笔记本上.笔记本电脑输出的最后一行是错误的:当然,给定的YAML字符串是一个序列. 当g被clang替换时,结果相同.两台机器都运行相同的Debian 4.18.10-2,两者都是x86_64,都运行Linux 4.18.0-2-amd64,两者都有相同版本的g和clang.两者都有相同的yaml-cpp库版本,重新安装: $locate libyaml-cpp. /usr/lib/x86_64-linux-gnu/libyaml-cpp.a /usr/lib/x86_64-linux-gnu/libyaml-cpp.so /usr/lib/x86_64-linux-gnu/libyaml-cpp.so.0.5 /usr/lib/x86_64-linux-gnu/libyaml-cpp.so.0.5.2 $dpkg -S /usr/lib/x86_64-linux-gnu/libyaml-cpp.a libyaml-cpp-dev: /usr/lib/x86_64-linux-gnu/libyaml-cpp.a $dpkg -S /usr/lib/x86_64-linux-gnu/libyaml-cpp.so.0.5.2 libyaml-cpp0.5v5:amd64: /usr/lib/x86_64-linux-gnu/libyaml-cpp.so.0.5.2 $apt-cache show libyaml-cpp-dev Package: libyaml-cpp-dev Source: yaml-cpp Version: 0.5.2-4 $apt-cache show libyaml-cpp0.5v5 Package: libyaml-cpp0.5v5 Source: yaml-cpp Version: 0.5.2-4 除了括号中的十六进制地址外,ldd的输出是相同的: $ldd a.out linux-vdso.so.1 (0x00007ffd0d5f0000) libyaml-cpp.so.0.5 => /usr/lib/x86_64-linux-gnu/libyaml-cpp.so.0.5 (0x00007f1e9fcd8000) libstdc++.so.6 => /usr/lib/x86_64-linux-gnu/libstdc++.so.6 (0x00007f1e9fb55000) libm.so.6 => /lib/x86_64-linux-gnu/libm.so.6 (0x00007f1e9f9c1000) libgcc_s.so.1 => /lib/x86_64-linux-gnu/libgcc_s.so.1 (0x00007f1e9f9a7000) libc.so.6 => /lib/x86_64-linux-gnu/libc.so.6 (0x00007f1e9f7ea000) /lib64/ld-linux-x86-64.so.2 (0x00007f1e9ff79000) 在这种情况下还有什么可能的解释? 解决方法
如果我从libyaml-cpp git存储库中通过当前主分支(post 0.6.2)从Debian替换libyaml-cpp-0.5,则该bug消失.这有力地支持了这样的假设,即错误的原因是libyaml-cpp中未定义的行为.
我不会进一步调查.目前,我将使用0.6版本.从长远来看,我将迁移到C库libyaml,它比libyaml-cpp稳定得多. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |