gpt4 book ai didi

c++ - 如何将 Objective C 代码添加到 FireBreath 项目?

转载 作者:塔克拉玛干 更新时间:2023-11-03 02:12:02 25 4
gpt4 key购买 nike

我正在为 Mac OS 编写一个浏览器插件,它将在状态栏中放置一个状态栏图标,用户可以使用该图标与浏览器插件进行交互。我已经在XCode 4.4.1 中成功构建了一个FireBreath 1.6 项目,并且可以在浏览器中安装它。然而,FireBreath 使用 C++,而大多数现有的 Mac OS 库都是用 Objective C 编写的。

在/Mac/projectDef.make 文件中,我按照建议添加了 Cocoa Framework 和 Foundation Framework here以及我在互联网上找到的其他资源:

target_link_libraries(${PROJECT_NAME}
${PLUGIN_INTERNAL_DEPS}
${Cocoa.framework} # added line
${Foundation.framework} # added line
)

我重新运行 prepmac.sh,希望在 XCode 中使用我的 .mm 文件和 .m 文件创建一个新项目;但是,它们似乎被忽略了。我只看到 .cpp 和 .h 文件。我为 projectDef.make 文件中的那些添加了规则,但它似乎没有什么不同:

file (GLOB PLATFORM RELATIVE ${CMAKE_CURRENT_SOURCE_DIR}
Mac/[^.]*.cpp
Mac/[^.]*.h
Mac/[^.]*.m #added by me
Mac/[^.]*.mm #added by me
Mac/[^.]*.cmake
)

即使我手动添加文件,我也会遇到一系列编译错误。其中大约有 20 个,都与文件 NSObjRuntime.h 文件相关:

Parse Issue - Expected unqualified-id
Parse Issue - Unknown type name 'NSString'
Semantic Issue - Use of undeclared identifier 'NSString'
Parse Issue - Unknown type name 'NSString'
...
...
Semantic Issue - Use of undeclared identifier 'aSelectorName'
...
...
Semantic Issue - Use of undeclared identifier 'aClassName'
...

这样持续了一段时间并出现了类似的错误...

根据我的阅读,这些错误的出现是因为对 Foundation Framework 的依赖,我相信我已经将其包含在项目中。我也试过在 XCode 中点击项目

我现在到了我不确定下一步该尝试什么的地步。人们说在 C/C++ 代码中使用 Objective C 并不难,但对 XCode 和 Objective C 不熟悉可能会导致我感到困惑。这只是我在这个新平台上的第 4 天。

我需要做什么才能让 XCode 编译 Objective C 代码?请记住,我对此有点陌生,所以如果您留下详细的答案而不是 中常见的含糊不清的单行,我将不胜感激。标签。我只是有点不知所措,但如果你能让我跨过这个障碍,我相信我会很好地从那里开始。

更新:

我编辑了 projects/MyPlugin/CMakeLists.txt 并在其中添加了 .m 和 .mm 规则。运行 prepmac.sh 后,文件包含在项目中,但我仍然遇到相同的编译错误。

我将所有 .h 文件和 .mm 文件从 Obj C 代码移至 MyPlugin 根文件夹并重新运行 prepmac.sh 文件。问题依然存在。相同的编译错误。

最佳答案

您的问题是您有 .h 文件被具有 objective-c 类型和/或包含在其中的 C++ 文件包含。为了执行您想要的操作,C++ 使用的所有类都需要将所有与 obj c 相关的内容保存在 #ifdef 中,或者干脆不在头文件中公开任何 obj c。

例如,您可以在 header 中使用此 ifdef:

#ifdef __OBJC__
// Objective C / C++ code here
#endif

请务必记住,.h 文件是包含 以及头文件,因此它们实际上是包含在内的。如果您在 .cpp 文件中包含 objective-c 代码,编译器会感到困惑和哭泣。


编辑:要记住的最重要的事情是,您需要确保 cpp 文件中不包含任何 objective-c 头文件(或其他带有 objective-c 代码的文件)。如果你能做到这一点,你会没事的。

关于c++ - 如何将 Objective C 代码添加到 FireBreath 项目?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12325559/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com