朋友们,有什么好办法测试程序在大端情况下能跑吗?

2023-01-09 23:37:13 +08:00
 formoslian
现在的任务是有一个 c++ 库,想测一下大端机器下能不能 work 。
因为是开源社区的活,所以是我自己在探索。
为啥会有这个需求,我觉得是因为很多老的工厂机器还是 ppc 等大端机。

我是可以接受租用服务器的,但是 powerpc 这种真的有服务器吗?
在搜索了很多外国帖子后,我转向 qemu ,现在卡在网络配置不通这边,这部分实在是太折磨我了。
950 次点击
所在节点    问与答
7 条回复
pocarisweat
2023-01-10 00:03:34 +08:00
建议还是 QEMU ,网络功能如果不是必需的话可以通过其他办法迂回解决,比如挂载数据到 iso 里。

如果要真机测的话,可以试试 Travis CI ,它们提供了 arm/ppc/z 的环境,但 ppc 似乎只有 ppc64le ,只有 z 是大端。而且好像要求是 GitHub 上的公开仓库。

https://linuxone.cloud.marist.edu/ 也许也可以申请一个临时的大端机环境。

https://godbolt.org/ 这个网站也可以试一下,看看有没有运行的选项。

或者方便的话(看到你说是开源库),可以提供点更多信息,也许我可以帮你测一下。
formoslian
2023-01-10 09:41:15 +08:00
太感谢了!昨晚发完帖子我就睡觉了,不好意思,没看到!

我先试试,如果太头疼就麻烦你帮我测试 hhhh
是 llvm/ libcxx 的一个库,那个分支拉代码下来大概 800M ,挂载 iso 总感觉不对劲 hhh

godbolt.org 的实现是交叉编译 https://github.com/compiler-explorer/infra/pull/127
我有点没说清楚,因为还有个类似 gtest 的测试框架需要来运行正确性。

我去试试 travis CI 👍
formoslian
2023-01-10 09:42:17 +08:00
@pocarisweat 第一次发帖,不是很熟悉回复功能,补一个 艾特
pocarisweat
2023-01-10 10:00:04 +08:00
@formoslian
是 32 位 Linux 上的老 PPC ?总之 libc++应该不会在大端下出问题,它对许多大端平台支持挺好的
formoslian
2023-01-10 10:31:57 +08:00
@pocarisweat 不是的,其实只要测试下大端就行

我们社区自己开发了一个库,提了个大 patch ,准备合入 libc++,但是没测过大端
(hahaha ,如果不能跑大端,就毁了上面的名声)
formoslian
2023-01-10 17:22:27 +08:00
docker 模拟 qemu ,目前看起来工作的挺顺利的
https://docs.gitlab.com/omnibus/development/s390x.html
我跑了一段 chatgpt 生成的代码

```
root@c12d4066a1ef:~# g++ check_endian.cc -O2 -o is_big_endian\?
root@c12d4066a1ef:~# ./is_big_endian\?
Original Number: 258
Bytes: 1 2
System is Big Endian
root@c12d4066a1ef:~# cat check_endian.cc
#include <iostream>
#include <cstring>

int main() {
short int num = 0x0102;
char *num_ptr = (char*)&num;

std::cout << "Original Number: " << num << std::endl;
std::cout << "Bytes: ";
for (int i = 0; i < sizeof(num); i++) {
std::cout << (int)*(num_ptr + i) << " ";
}
std::cout << std::endl;

if (*num_ptr == 0x01) {
std::cout << "System is Big Endian" << std::endl;
} else {
std::cout << "System is Little Endian" << std::endl;
}
return 0;
}
root@c12d4066a1ef:~# lscpu | grep Endian
Byte Order: Big Endian
root@c12d4066a1ef:~#
```
formoslian
2023-01-10 17:26:04 +08:00
markdown 好像没起作用,补一个 godbolt 的 x86 小端(intel skylake) 结果

https://godbolt.org/z/9c7dGf6ox

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/907747

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX