如何解决std::shared_ptr::use_count() 在部分交叉编译时给出不同的结果
我无法理解 shared_ptr 生命周期和交叉编译的情况。给定以下包含内容的文件:
a.hpp
#ifndef LIBA
#define LIBA
#include <memory>
std::shared_ptr<std::string> createShared();
#endif
a.cpp
#include "a.hpp"
#include <iostream>
std::shared_ptr<std::string> createShared(){
static std::shared_ptr<std::string> member = std::make_shared<std::string>("Hello");
std::cout << "use count " << member.use_count() << std::endl;
return member;
}
main.cpp
#include <iostream>
#include <memory>
#include "a.hpp"
int main(int,char**) {
auto value = createShared();
std::cout << "use count " << value.use_count() << std::endl;
std::cout << "value: " << *value<< std::endl;
}
我可以简单地在我的电脑或我的树莓派上编译它
g++ main.cpp a.cpp
运行结果 a.out 给出
use count 1
use count 2
value: Hello
这是我所期望的。 但是如果我选择交叉编译 a.cpp,事情就会改变。
所以我在我的电脑上运行
arm-linux-gnueabihf-g++ -c a.cpp
然后我将结果 a.o scp 到我运行的树莓派
g++ main.cpp a.o
运行结果 a.out 然后给出
use count 1
use count 0
value: Hello
这里有什么问题?为什么我在执行这些程序时会得到不同的结果?
更新:检查每个编译器的版本,交叉编译器的版本为 8.4.0,树莓派编译器的版本为 8.3.0
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。