我的 FireBreath 插件的 Mac 版本出现链接错误,如下所示:
Undefined symbols for architecture x86_64:
"_IOIteratorNext", referenced from:
MyFunction(...) in MyFile.o
请帮我解决这个链接错误。
我有类似的错误"_IOObjectRelease", "_IORegistryEntryCreateCFProperty", "_IORegistryEntryGetParentEntry", "_IOServiceGetMatchingServices", "_IOServiceMatching", and "_kIOMasterPortDefault"
。这让我相信我需要包含 IOKIT 和 COREFOUNDATION 框架。
我已经得出结论,这些是我需要的框架,因为我可以通过像这样直接将它们添加到 Xcode 来暂时使构建成功:
- 在项目导航器中选择项目。
- 选择目标。
- 选择“构建阶段”选项卡。
- 打开“Link Binaries With Libraries”扩展器(您可能必须使用“Add Build Phase”)。
- 单击“+”按钮一次以添加每个框架。
通过 Xcode 添加框架后,构建成功。但是,一旦再次运行准备脚本“prepmac.sh”,框架就会丢失并且构建失败。
我已经尝试通过编辑 PluginConfig.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
解决方案:根据出租车司机的建议,解决方案是在 Mac/projectDef.cmake 中正确指定正确的框架,并完全删除构建目录并使用 prepmac.sh 脚本从头开始重新制作。