微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

是什么导致 c++ 函数签名不同?

如何解决是什么导致 c++ 函数签名不同?

我们的构建机器设置了较早版本的 Android NDK。我们的大部分代码都是在这台机器上构建的,并创建了最终的 Android 映像。

我的开发机器使用的是最新版本的Android NDK。

我正在开发机器上使用 C++ 代码创建一个静态库,并将其复制到构建机器以进行最终链接

问题是两台机器上的编译器在名称修改上似乎不同。

例如,对于 std::string,我的开发机器产生这个签名:

 std::__ndk1::basic_string<char,...>

但是,在构建机器上,预期的签名是:

 std::__1::basic_string<char,...>

我想弄清楚 android-gcc 编译器是否使用了不同的名称修改方案,或者 stl 文件本身是否不同。如果是第一种情况,是否有办法强制执行不同的名称修改方案。谢谢。

解决方法

这里没有进行名称修改。似乎有两个不同的标准库在使用,一个在名为 basic_string 的内部命名空间中定义 __ndk1,另一个在 __1 中定义。这基本上是一个实现细节。确保使用相同的编译器和标准库实现来匹配。

附言std::basic_string 不是函数,而是类模板。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。