我目前正在我的 Ubuntu 机器上为 Raspberry Pi 执行一些交叉编译测试。我目前的理解是 Raspberry Pi 支持硬件浮点,并且默认的 Raspbian OS 映像是使用硬件浮点 (armhf) 构建的。正确的?
如果我使用“arm-linux-gnueabi”工具链(不指定任何 ARM 标志)构建我的应用程序,那么我的应用程序将使用软浮点 ABI。正确的?
在这种情况下,我的所有依赖项也必须使用相同的 ABI 才能正确链接。正确的?
如果我的应用程序使用软浮点 ABI,那么我的应用程序肯定链接到软浮点 ABI 共享标准库。当我在 Raspberry Pi 上运行我的应用程序时,一切都按预期工作。如果 Raspbian 使用硬浮点 ABI(我猜共享标准库也可以),这怎么可能?
仅供参考:我的默认 arm-linux-gnueabi 配置为:
--with-float=soft
--with-arch=armv5
我正在像这样编译我的应用程序:
arm-linux-gnueabi-g++ test.cpp -o test
我的程序确实包括浮点计算:
double test = (123.456 + 789.123) * 1.23;
printf("%f\n", test); // prints: 1122.472170
printf("%f\n", std::floor(test)); // prints: 1122.000000