如何解决Visual Studio C ++ ARM-使用三角函数时生成错误
我一直在Visual Studio中为Android创建动态库(.so文件)。最近,我在标题中遇到了问题。我使用 asin , cos 和 atan2 功能对其进行了测试。我尝试创建一个空项目,以查看错误是否是由于项目中的其他原因引起的,但该错误仍然存在。我感到特别奇怪的是,至少对于asin,如果我确保该参数在[-1,1]范围内,如下所示,错误就会停止。
double r31 = complicatedAlgorithm();
if (r31 > 1)
r31 = 1;
if (r31 < -1)
r31 = -1;
double result = asin(r31);
我无法使用cos和atan2复制此行为。
配置
- C语5.0
- GNU静态STL库(默认选择不会发生,但这不是我的项目的选项)
错误消息
- 对“ asin”的未定义引用
- clang.exe:错误:链接器命令失败,退出代码为1(使用-v查看调用)
- 标识符__fp16未定义(仅在主项目中。在测试项目中,我没有得到此标识符,但其他方面的行为相同)。
观察
- 如果编译器未执行优化(-O0模式),则asin的钳制解决方案不会起作用
- 如果将钳位代码转换为返回钳位值的函数,则错误将停止,但是如果值通过引用传递,则错误仍然存在。
- 添加我在互联网上看到的 -mfp16-format = ieee 标志会导致未知的参数错误。
- 对于cos :如果直接给出参数(例如cos(1)),或者它是在编译时知道其值的变量,则不会引发错误。
- 使用asinf,cosf和atan2f不能解决问题。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。