问题描述
我一直在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 (将#修改为@)