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」を使用する必要がある場合があります)。
- 「+」ボタンを 1 回クリックして、各フレームワークを追加します。
Xcode を使用してフレームワークを追加すると、ビルドは成功します。ただし、準備スクリプト「prepmac.sh」が再度実行されると、フレームワークが失われ、ビルドが失敗します。
PluginConfig.cmake と Mac/projectDef.cmake を編集して、いくつかの方法で FireBreath を介してフレームワークを追加しようとしましたが、CMakeLists.txt を変更することも検討しましたが、これはあまり有望ではないようです。
2 つのファイル内で次のステートメントをさまざまな組み合わせで試しました.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
解決策: Taxlian からのアドバイスに基づく解決策は、Mac/projectDef.cmake で正しいフレームワークを正しく指定し、ビルド ディレクトリを完全に削除して、prepmac.sh スクリプトを使用して最初から再作成することでした。