Android ndk-r5调用std :: functions

时间:2011-01-19 16:31:36

标签: c++ android stl box2d android-ndk

我刚刚开始使用ndk-r5,我需要导入一个库 使用std :: numeric_limits,std :: sort和stl。

中的几个函数

我不确定是否使用stlport支持这些功能,如果是这样的话,那是什么 我应该用于构建配置? 我从文档中读到的是你必须在Application.mk上包含APP_STL:= stlport_static。这是我正在做的唯一额外的事情,但它不起作用,当编译器处于上述功能时,我得到编译错误。

感谢您的任何建议。

3 个答案:

答案 0 :(得分:1)

通过替换所有< cheader>,我能够在Android上获得Box2D编译。包括< header.h>,并修复一些突然出现的事情: 对于

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

}

答案 1 :(得分:0)

这里有很多可能性,您需要发布编译器错误以便进行更好的评估。

要检查的事项: 您使用的是num_get_float.cpp吗?

答案 2 :(得分:0)

实际上我用C等价物解决它们的大多数错误(比如用std :: namespace调用的数学函数)只会导致我出现问题的两个错误是:

(1)numeric_limits不是'std'的成员,在: float32 infinity = std :: numeric_limits :: infinity();

和'sort'的同类错误,在: (2)std :: sort(m_pairBuffer,m_pairBuffer + m_pairCount,b2PairLessThan);

我想我可以使用其他功能来取代这两个。我可以使用什么标准var用于无限?