ホームページ  >  記事  >  バックエンド開発  >  macOS 上の cgo で相対 dylib パスを指定する方法

macOS 上の cgo で相対 dylib パスを指定する方法

WBOY
WBOY転載
2024-02-08 22:10:27708ブラウズ

如何在 macOS 上的 cgo 中指定相对 dylib 路径

これは、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 サイトの他の関連記事を参照してください。

声明:
この記事はstackoverflow.comで複製されています。侵害がある場合は、admin@php.cn までご連絡ください。