【问题标题】: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 用于无穷大?

      【讨论】:

        猜你喜欢
        • 2011-06-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-05-26
        • 2012-02-25
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多