-
Notifications
You must be signed in to change notification settings - Fork 566
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Xcode 16 中啟用 C++ 互通時 librime 的 C API 無法使用 #930
Comments
librime 的 API 是 C 的,不要用 C++ 模式 |
一个项目中会有多个依赖,只要这个项目中开启了 C++ 与 Swift 的互操作,尽管你使用 C 模式操作 librime,也是会有编译错误的。 |
|
那大概是Xcode/Swift需要解決的問題吧 |
不是的,https://developer.apple.com/documentation/xcode/identifying-and-addressing-framework-module-issues 中文档说明,可以得知,Apple 是有这样的要求,你不可能让 Apple 把这个规则取消了。 而且如我上面所说,别的项目也正在调整,如:tree-sitter/tree-sitter#3534 |
librime又不是只為Apple做的⋯而且官方實現Squirrel沒有問題。 你要是能提PR就PR吧 |
如我上面所说,问题触发条件是:Xcode 项目有没有开启 Swift 与 C++ 互操作模式, 官方 Squirrel 中没有开启此模式,所以没有这个问题。 这个不是 PR 的问题。我上面也说了,我不清楚这样的调整是否会影响到其他平台,所以才询问下。 |
你可以提個PR,各個平台的人才方便測試不是 |
提 PR 的前提不应先明确结果么,直接提交启不草率? |
看这个报错的意思是把 include 挪到 extern "C" 外面就行。应该是没问题的。 |
目前我本地是移动到 |
预计不会。stdlib, stdint, stdbool都是标准C头文件。CI能过就没问题。 |
当将 C 头文件作为具有 C++/Objective-C++ 互操作性的 Swift 模块的一部分来使用时,Apple Clang 会异常提示
included with an extern "C" linkage block
。这就阻止了直接或间接使用 librime 的 Swift 项目启用 C++ 互操作模式。具体错误如下:
截图如下:
按 Apple 的解释是:https://developer.apple.com/documentation/xcode/identifying-and-addressing-framework-module-issues。
在升级到 XCode 16 后,我发现其他项目也有类似问题,如:https://github.com/tree-sitter/tree-sitter ,我看到这个库的修复方法是将导入头文件放到
extern "C"
的外部 fix(lib): fix api header C++ interop我自己本地将头文件中的导入包语句移动到
extern "c"
外部后,是可以完成编译的。但我不清楚 librime 是否也可以如此修复,这样修复是否会导致其他平台引用头文件时,遇到什么问题。The text was updated successfully, but these errors were encountered: