0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

Xcodeをバージョン16.0へアップデートしたのちに、ビルドした際にエラー"Undefined symbol: __mh_execute_header"が出力される。

Posted at

環境

  • Xcode Version 16.0

事象

  • 担当エンジニアが、XcodeをVersion 16.0へアップデートしました。
  • アップデート完了後に、UaaL(Unity as a Library)アプリをビルドしたところ下記のエラーが出力されました。
    Undefined symbol: __mh_execute_header
    
    Linker command failed with exit code 1 (use -v to see invocation)
    

解決策

  • UnityFrameworkをセットアップする箇所のうち、_mh_execute_headerを使用している箇所を、_mh_dylib_header へ修正する。
        let bundlePath: String = Bundle.main.bundlePath + "/Frameworks/UnityFramework.framework"
        let bundle = Bundle(path: bundlePath)!
        if !bundle.isLoaded == false {
           bundle.load()
        }

        let frameworkClass = bundle.principalClass as! UnityFramework.Type
        let framework = frameworkClass.getInstance()!
        if framework.appController() == nil {
           let machineHeader = UnsafeMutablePointer<MachHeader>.allocate(capacity: 1)
           // 変更前
           // machineHeader.pointee = _mh_execute_header
           // 変更後
           machineHeader.pointee = _mh_dylib_header 
           framework.setExecuteHeader(machineHeader)
       }

  • エンジニアの環境では上記で解決しましたが、内容に誤りがあったり、他に情報がございましたらコメント頂けますと幸いです。

参考元

_mh_execute_header is a synthetic symbols inserted by the linker to mark the beginning of a Mach-O executable. There are a suite of these, one for each Mach-O image type, all defined in . That header has doc comments that explain their usage.
The most common cause of problems like this is with folks using the wrong symbol. _mh_execute_header is only relevant if you’re building an executable. If, for example, you’re building a dynamic library or framework, you must use _mh_dylib_header instead.

  • Apple様の回答によりますと、UaaL(Unity as a Library)含め、Frameworkをビルドする際にはシンボル_mh_dylib_headerを使用しなければならないようです。

  • __mh_execute_headerについては、上記ページで解説しています。
0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?