我的FireBreath插件的Mac版本出现链接错误,如下所示:
Undefined symbols for architecture x86_64:
"_IOIteratorNext", referenced from:
MyFunction(...) in MyFile.o
请帮我解决此链接错误。
"_IOObjectRelease", "_IORegistryEntryCreateCFProperty", "_IORegistryEntryGetParentEntry", "_IOServiceGetMatchingServices", "_IOServiceMatching", and "_kIOMasterPortDefault"
我有类似的错误。
这让我相信我需要包含Frameworks IOKIT和COREFOUNDATION。
我已经得出结论,这些是我需要的框架,因为我可以通过将它们直接添加到Xcode来暂时使构建成功:
通过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
解决方案: 基于taxilian的建议,解决方案是在Mac / projectDef.cmake中正确指定正确的Frameworks并完全删除构建目录并使用prepmac.sh脚本从头开始重新构建。
答案 0 :(得分:2)
简单地执行find_library不足以使其链接;您还需要将其添加到target_link_libraries调用中。你还应该确保你的案例与图书馆本身相匹配;我不知道在mac上是否重要,但如果它是一个区分大小写的文件系统(并且可以在mac上使用),这是很好的做法。
框架的正确案例是“IOKit”和“CoreFoundation”
您可以在Using Libraries的firebreath.org页面上找到有关如何正确执行此操作的详细信息。尝试这样的事情:
find_library(IOKIT_FRAMEWORK IOKit)
find_library(COREFOUNDATION_FRAMEWORK CoreFoundation)
target_link_libraries(${PROJECT_NAME} ${COREFOUNDATION_FRAMEWORK} ${IOKIT_FRAMEWORK})
请注意,这需要在“add_mac_plugin”调用之后的某处的Mac / projectDef.cmake文件中。