【问题标题】:Android ndk-r5 calling std:: functionsAndroid ndk-r5 调用 std:: 函数
【发布时间】:2011-01-19 16:31:36
【问题描述】:
我刚开始使用 ndk-r5,我需要导入一个库
使用 std::numeric_limits、std::sort 和来自 stl 的更多函数。
我不确定使用 stlport 是否支持这些功能,如果是这样,什么
我应该使用配置来构建吗?
我从文档中读到的是,您必须在 Application.mk 中包含 APP_STL := stlport_static。那是我正在做的唯一额外的事情,但它不起作用,当编译器在提到的函数上时,我得到编译错误。
感谢您的任何建议。
【问题讨论】:
标签:
c++
android
stl
box2d
android-ndk
【解决方案1】:
我能够在 android 上编译 Box2D,方法是用 替换所有 包含,并修复一些突然出现的东西:
对于
std::numeric_limits::infinity()
我正在使用
INFINITY /*as defined in float.h ... MAX_FLT is an alternative which might work*/
对于
std::sort(m_pairBuffer, m_pairBuffer + m_pairCount, b2PairLessThan)
我这样做了:
#include <stdlib.h>
/*...*/
qsort(m_pairBuffer, m_pairCount, sizeof(b2Pair),b2PairQSORTLessThan);
使用上面定义的这个函数:
static int b2PairQSORTLessThan(const void*element1,const void*element2)
{
b2Pair *pair1=(b2Pair*)element1;
b2Pair *pair2=(b2Pair*)element2;
if (pair1->proxyIdA < pair2->proxyIdA)
return -1;//pair1 goes BEFORE pair2
else if (pair1->proxyIdA > pair2->proxyIdA)
return 1; // pair1 goes AFTER pair2
else{//if (pair1->proxyIdA == pair2->proxyIdA)
if (pair1->proxyIdB < pair2->proxyIdB)
return -1;
else if (pair1->proxyIdB > pair2->proxyIdB)
return 1;
}
return 0; // they are equal
}
【解决方案2】:
这里有很多可能性,您需要发布编译器错误以便更好地评估。
检查事项:
你在使用num_get_float.cpp 的任何东西吗?
【解决方案3】:
实际上,我可以使用 C 等效项(例如使用 std:: 命名空间调用的数学函数)解决大多数错误,唯一导致我出现问题的两个是:
(1) numeric_limits 不是“std”的成员,在:
float32 无穷 = std::numeric_limits::infinity();
和“排序”的相同类型的错误,在:
(2) std::sort(m_pairBuffer, m_pairBuffer + m_pairCount, b2PairLessThan);
我想我可以使用其他功能来替换这两个。我可以将什么标准 var 用于无穷大?