android - 是什么导致 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
. 这基本上是一个实现细节。确保使用相同的编译器和标准库实现来匹配它们。
PSstd::basic_string
不是函数,而是类模板。
推荐阅读
- reactjs - React 聊天机器人优化 react-messenger-customer-chat
- image - Matlab-内存不足:图像处理
- r - 错误:只有字符串可以转换为符号
- pm2 - PM2-health:我可以使用 pm2-health 模块发送电子邮件警报/通知吗?
- django - 如何使用 django 中的编辑按钮切换具有预填充内容的表单
- android - 在 BottomSheet 内嵌套 ViewPager2 的 RecyclerView
- javascript - pdf-lib 在前端合并 pdf
- swift - 将较高 QOS 的 dispatchWorkItem 添加到较低 QOS 的 dispatchQueue 时,服务质量 (QOS) 有何变化?
- angular - ngOnDestroy 的茉莉花测试失败
- git - 如何从我自己的存储库的子模块将更改推送到其他人的存储库(我是合作者)?