C++ FixPress Mac OS X基金会

C++ FixPress Mac OS X基金会,c++,macos,firebreath,browser-plugin,C++,Macos,Firebreath,Browser Plugin,我在FireBreath插件的Mac版本上出现链接错误,如下所示: Undefined symbols for architecture x86_64: "_IOIteratorNext", referenced from: MyFunction(...) in MyFile.o find_library(IOKIT_FRAMEWORK IOKit) find_library(COREFOUNDATION_FRAMEWORK CoreFoundation) target_lin

我在FireBreath插件的Mac版本上出现链接错误,如下所示:

Undefined symbols for architecture x86_64:
  "_IOIteratorNext", referenced from:
      MyFunction(...) in MyFile.o
find_library(IOKIT_FRAMEWORK IOKit)
find_library(COREFOUNDATION_FRAMEWORK CoreFoundation)
target_link_libraries(${PROJECT_NAME} ${COREFOUNDATION_FRAMEWORK} ${IOKIT_FRAMEWORK})
请帮我解决这个链接错误

对于_IOObjectRelease、_IORegistryEntryCreateCFProperty、_ioregistryentrygetparentry、_IOServiceGetMatchingServices、_IOServiceMatching和_kiomaterportdefault,我也有类似的错误。 这让我相信我需要包括框架IOKIT和COREFOUNDATION

我得出的结论是,这些是我需要的框架,因为我可以通过将它们直接添加到Xcode中来暂时使构建成功,如下所示:

Undefined symbols for architecture x86_64:
  "_IOIteratorNext", referenced from:
      MyFunction(...) in MyFile.o
find_library(IOKIT_FRAMEWORK IOKit)
find_library(COREFOUNDATION_FRAMEWORK CoreFoundation)
target_link_libraries(${PROJECT_NAME} ${COREFOUNDATION_FRAMEWORK} ${IOKIT_FRAMEWORK})
在项目导航器中选择项目。 选择目标。 选择“构建阶段”选项卡。 打开“使用库链接二进制文件”扩展器,您可能必须使用该扩展器 “添加构建阶段”。 单击“+”按钮一次以添加每个框架。 通过Xcode添加框架后,构建成功。但是,一旦准备脚本'prepmac.sh'再次运行,框架将丢失,构建将失败

我曾尝试通过编辑pluginofig.cmake和Mac/projectDef.cmake,以多种方式通过FireBreath添加框架,甚至考虑修改CMakeLists.txt,但这似乎不太可能

我在两个.cmake文件中尝试了以下语句的各种组合,但我对将它们放在何处没有信心:

find_library(IOKIT_FRAMEWORK IOKit)
message("Finding library IOKit: ${IOKIT_FRAMEWORK}")

find_library(COREFOUNDATION_FRAMEWORK CoreFoundation)
message("Finding library CoreFoundation: ${COREFOUNDATION_FRAMEWORK}")

target_link_libraries(${PROJECT_NAME}
    ${COREFOUNDATION_FRAMEWORK}
    ${IOKIT_FRAMEWORK}
    ${PLUGIN_INTERNAL_DEPS}
)
所有更改似乎都没有改变构建日志。 当然,我正在使用prepmac.sh在更改之间生成项目,其中新的“消息”语句报告:

Finding library IOKit: /System/Library/Frameworks/Cocoa.framework
Finding library CoreFoundation: /System/Library/Frameworks/CoreFoundation.framework
解决方案:
根据taxilian的建议,解决方案是在Mac/projectDef.cmake中正确指定正确的框架,并完全删除构建目录,然后用prepmac.sh脚本从头开始重新创建它。

仅仅做一个find_库不足以使其链接;您还需要将其添加到目标链接库调用中。此外,您还应该确保您的案例与库本身相匹配;我不知道这在mac上是否重要,但如果它是一个区分大小写的文件系统,这是一个很好的做法,是的,这在mac上是可能的

框架的正确案例是IOKit和CoreFoundation

有关如何正确执行此操作的更多信息,请参见的页面。试着这样做:

Undefined symbols for architecture x86_64:
  "_IOIteratorNext", referenced from:
      MyFunction(...) in MyFile.o
find_library(IOKIT_FRAMEWORK IOKit)
find_library(COREFOUNDATION_FRAMEWORK CoreFoundation)
target_link_libraries(${PROJECT_NAME} ${COREFOUNDATION_FRAMEWORK} ${IOKIT_FRAMEWORK})

请注意,这需要在您的Mac/projectDef.cmake文件中添加Mac插件调用之后的某个位置。

亲爱的taxilian,感谢您的快速回答!是的,我已经将框架添加到GETHyLink库中,但是我的FundLabar命令不是在AddiMaxPuxin之前,我的基础名称的情况与您的建议不一致。然而,这些变化并没有起到任何作用。请注意,我猜测了框架名称,因此它们不太可能完全正确。有进一步的想法吗?添加一行,看起来像:messageFinding library IOKit:${IOKit_FRAMEWORK}-这将显示它是否找到了库。如果没有,您必须弄清楚为什么notprepmac.sh似乎同时找到了它们:Finding library IOKit:/System/library/Frameworks/Cocoa.framework Finding library CoreFoundation:/System/library/Frameworks/CoreFoundation.framework。我不相信这些是我的特殊链接错误的基础。这是可能的。Google是您的朋友=]尝试删除您的构建目录并重新运行准备脚本。