NDK r16b std::istringstream 的行为不符合预期
NDK r16b std::istringstream doesn't behave as expected
我有一个应用程序,它的原生代码是使用 NDK r12b 编译的。但现在我想迁移到 NDK r16b。
我使用独立的工具链来编译我的应用程序(适用于 r12b 和 r16b(。我用来制作工具链的参数是:
make_standalone_toolchain.py --arch arm --api 15 --stl libc++
使用 R16b 后,我发现 std::istringstream 不会像"0.4 0.5 "那样拆分空格分隔的数字。istringstream的输出仍然是"0.4 0.6"而不是0.4和0.6。
此外,如果有减号 (-(,它将拆分输入,例如:"Armeabi-V7A"将变为"Armeabi"和"V7A"。而当我使用 R12b 时,istringstream 不会拆分并输出"Armeabi-V7A"。我使用此代码段来检查:
const char* input = " 0.4 0.5 "
std::istringstream iss(input);
__android_log_print(ANDROID_LOG_INFO, "myTag","istringstream input = %s", input);
for (std::istream_iterator<std::string> it = std::istream_iterator<std::string>(iss); it != std::istream_iterator<std::string>(); it++)
{
__android_log_print(ANDROID_LOG_INFO, "myTag", "istringstream content = %s", it->c_str() ? it->c_str() : "NULL");
}
我使用 clang 作为编译器,这些是我使用的命令行:
编译选项:
-fsigned-char
-fno-exceptions
-fno-rtti
-pipe
-ferror-limit=1000
-stdlib=libc++
-std=c++11
-D__ANDROID_API__=15
-mfpu=vfpv3-d16
-mfloat-abi=softfp
-target armv7a-none-linux-androideabi
-marm
-march=armv7-a
-mtune=generic-armv7-a
--sysroot $NDK_Root$/sysroot
-g
-O0
链接选项:
-lOpenSLES
-lGLESv2
-lEGL
-latomic
-landroid
-llog
-lm
-lz
-ldl
-lc++_shared
-lgcc
-lc
-Wl,--build-id
-target armv7a-none-linux-androideabi
-no-canonical-prefixes
-march=armv7-a
-Wl,--fix-cortex-a8
-Wl,-z,noexecstack
-Wl,--no-undefined
-Wl,-z,relro
-Wl,-z,now
-nostdlib
--sysroot $NDK_Root$/sysroot
任何人都可以告诉我为什么会发生这种情况?谢谢。
事实证明,我正在将libc ++_shared.so从NDK r12b复制到我的APK,这就是这种奇怪行为的原因。
这太愚蠢了,我的结论是案件结束了。
相关文章:
- 将 QByteArray 转换为无符号短:不符合预期
- 为什么此模板函数的行为不符合预期?
- 为什么 std::basic_ostream::运算符<<不符合 CONST 资格?
- std::vector 构造initializer_list的行为不符合预期
- C++使用 LZ4 进行压缩,压缩信息不符合预期
- 为什么 std::future::wait_for 的行为不符合预期?
- Seekg 的行为不符合预期
- Int 附加到字符,行为不符合我的预期
- NDK r16b std::istringstream 的行为不符合预期
- 为什么std::is_copy_constructible的行为不符合预期
- 我的代码到底在哪里不符合键和值类型的规范
- 如果库的包含路径设置不符合预期,如何引发编译错误
- 为什么 [std::is_move_assignable] 的行为不符合预期?
- 代码片段在某些情况下有效,但不符合预期,为什么
- 对指针行为不符合预期行为的 const 引用
- 字节不符合记忆映射和对文件进行排序
- srand() 范围不符合预期的 C++
- 简单的字符串输出不符合预期(出现换行符)
- 为什么根据 C++11 标准,std::seed_seq是不可复制的,为什么 gcc/clang 不符合?
- 如果没有c++11,易编程8.91就不符合要求