Android的c++代码里,std::to_string等不能使用的解决办法

 

之前float、int等转字符串一直傻不拉几的用stringstream,最近才发现竟然有个to_string

string to_string (int val);
string to_string (long val);
string to_string (long long val);
string to_string (unsigned val);
string to_string (unsigned long val);
string to_string (unsigned long long val);
string to_string (float val);
string to_string (double val);
string to_string (long double val);

一下用得贼爽,Windows平台、IOS平台都没问题。今天编Android的,一下傻眼了,竟然找不到这个函数。

点进std源文件里,<bits/basic_string.h>里明明有这个函数的一堆实现。

那么是被什么宏给排除了么?找到上边的宏

#if ((__cplusplus >= 201103L) && defined(_GLIBCXX_USE_C99) \
     && !defined(_GLIBCXX_HAVE_BROKEN_VSWPRINTF))

头大!__cplusplus就是c++的版本,在gradle里配置的cppFlags.add("-std=c++11")肯定是支持c++11了的。后面两个宏查了也无头绪。

持续搜索后发现,果然所有问题都可以早stackoverflow上找到答案!

https://stackoverflow.com/questions/22774009/android-ndk-stdto-string-support

里面说了,stl用c++_shared或者c++_static就可以解决。(我的是gnustl_static")。

如果是gradle+cmake配置的项目,就这样:

android {
  ...
  defaultConfig {
    ...
    externalNativeBuild {
      cmake {
        ...
        arguments "-DANDROID_STL=c++_shared"
        //或arguments "-DANDROID_STL=c++_static"
      }
    }
  }
  ...
}

如果是Experimental Gradle Plugin,就这样:

model {
  ...
  android {
    ...
    ndk {
      ...
      stl = "c++_shared"
      //或 stl = "c++_static"
    }
  }
}

加上之后刷新项目,IDE里竟然真的找到to_string的定义了。

开始编译,我的代码倒是没问题了,但是链接时,第三方库里一大堆未找到定义的链接错误!

这么说,第三方库用的是gnustl的,我也必须用gnustl的了?难搞!

只能暂时安卓端特殊处理,后续继续深入研究。

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值