在Objective-C中与__cplusplus一起使用@import

10

当我试图编译一个链接到使用新的@import指令的文件的Objective C++文件(.mm)时,我会得到一些错误。目前,我的唯一解决方案是用旧的#import指令替换@import。

是否还有其他解决方案,以便我仍然可以使用@import?


1
具体是哪些错误? - Tommy
构建失败:“程序中出现意外的'@'” - Mihai Popa
2个回答

22

编辑: 根据最新文档,现在应该可以工作了。

请参见此处。您需要使用-fcxx-modules标志而不是-fmodules标志,但正如官方文档所建议的那样 - 实验性的和非常错误。我根本没能让它工作... 在我看来,最好还是坚持使用#import#include,直到该功能脱离实验阶段。

来自clang.llvm.org:

-fcxx-modules
    Enable the modules feature for C++ (EXPERIMENTAL and VERY BROKEN).

@kevlar 那个答案是三年前的了.. 根据文档,现在应该可以工作了。不过我自己还没有尝试过。 - Ivan Genchev
1
抱歉问一个无聊的问题,但是你在哪里设置这个标志? - Stan
@IvanGenchev,文档已更新。您能否更新您的答案? - bikram990
请问您能帮我找一下在Xcode中设置这个标志的位置吗? - Maulik Kundaliya
2
我将其添加到“构建设置”->其他C++标志中,并进行了编译。 - Elsammak

2
在我的情况下,我需要在我的应用程序中使用OpenCV。
我通过手动添加“-fcxx-modules”(Objective C++)到“其他C++标志”(Build Settings/ Apple Clang - Custom Compiler Flags/ Other C++ Flags)来解决了这个问题。
或者将“-fmodules”(Objective C)添加到“其他C标志”(Build Settings/ Apple Clang - Custom Compiler Flags/ Other C Flags)。
并且,在修复opencv库中的预期标识符错误之前,我需要先导入opencv.hpp,以避免任何Apple头文件的干扰。例如,在Prefix.pch中,我进行了如下组织:
#ifdef __cplusplus
#include <opencv2/opencv.hpp>
#endif

#import <Availability.h> 

我正在使用:

  • Xcode - 11.3
  • CocoaPods - 1.9.1
  • OpenCV2 - 4.3.0

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接