是什么导致 C++ 函数签名不同?
What is causing c++ function signature to be different?
我们的构建机器设置了早期版本的 Android NDK。我们的大部分代码都是在这台机器上构建的,并创建了最终的 Android 图像。
我的开发机器使用的是最新版本的Android NDK。
我正在我的开发机器上从我的 C++ 代码创建一个静态库,并将它复制到构建机器以进行最终链接。
问题是两台机器上的编译器在名称修改方面似乎有所不同。
例如,对于 std::string,我的开发机器产生了这个签名:
std::__ndk1::basic_string<char, ...>
然而,在构建机器上,预期的签名是:
std::__1::basic_string<char, ...>
我想弄清楚 android-gcc 编译器是否使用了不同的名称修改方案,或者 stl 文件本身是否不同。如果是第一种情况,有没有办法强制执行不同的名称修改方案。谢谢
这里没有进行名称修改。似乎有两个不同的标准库在使用,一个在名为 __ndk1
的内部命名空间中定义 basic_string
,另一个在 __1
中定义。这基本上是一个实现细节。确保使用相同的编译器和标准库实现来匹配它们。
P.S。 std::basic_string
不是一个函数,而是一个 class 模板。
我们的构建机器设置了早期版本的 Android NDK。我们的大部分代码都是在这台机器上构建的,并创建了最终的 Android 图像。
我的开发机器使用的是最新版本的Android NDK。
我正在我的开发机器上从我的 C++ 代码创建一个静态库,并将它复制到构建机器以进行最终链接。
问题是两台机器上的编译器在名称修改方面似乎有所不同。
例如,对于 std::string,我的开发机器产生了这个签名:
std::__ndk1::basic_string<char, ...>
然而,在构建机器上,预期的签名是:
std::__1::basic_string<char, ...>
我想弄清楚 android-gcc 编译器是否使用了不同的名称修改方案,或者 stl 文件本身是否不同。如果是第一种情况,有没有办法强制执行不同的名称修改方案。谢谢
这里没有进行名称修改。似乎有两个不同的标准库在使用,一个在名为 __ndk1
的内部命名空间中定义 basic_string
,另一个在 __1
中定义。这基本上是一个实现细节。确保使用相同的编译器和标准库实现来匹配它们。
P.S。 std::basic_string
不是一个函数,而是一个 class 模板。