これは、macOS で cgo を使用し、相対 dylib パスを指定する場合によくある問題です。 cgo は Go 言語が C 言語と対話するために使用するツールであり、dylib は macOS 上のダイナミック リンク ライブラリです。相対パスを指定すると、プロジェクトがより柔軟で移植可能になります。では、macOS 上の cgo で相対 dylib パスを指定するにはどうすればよいでしょうか? PHPエディタのいちごが詳しくお答えします。
現在、c で書かれた既存の dylib を go で動作させることを試みています。 このために cgo を使用すると、すべてが正しくコンパイルされます。 go build が生成された実行可能ファイル dyld を実行しようとすると、 go ソース ディレクトリにある dylib が見つかりません。
これらの cflags と ldflags を使用していますが、成功しません:
リーリー マジック文字列 @executable_path
を使用して相対ライブラリ検索パスを指定できることも学びましたが、それを -l に追加したり、リンカー フラグに -install_name を追加しようとしても何も得られません。
これは私が受け取るリンカ エラー メッセージです:
リーリーgo の外部にビルド ステップを追加しない場合、go build で実行できるように、後でバイナリが配置されるのと同じフォルダーにある dylib を使用するように cgo を適切に設定するにはどうすればよいですか?
目標にはかなり近づいていましたが、実際のライブラリに保存されている検索パスが間違っていたことがわかりました。
私の質問のコードは、ライブラリを次のように変更した後、正常に動作します:
リーリーgoland に go build を制御させ、実行中のアプリケーションの出力ディレクトリにライブラリをコピーするきれいな方法は見つかりませんでしたが、出力ディレクトリを絶対パスに設定し、Pre-実行コマンドを出力フォルダーにコピーします。
以上がmacOS 上の cgo で相対 dylib パスを指定する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。