Rumah  >  Artikel  >  pembangunan bahagian belakang  >  Bagaimana untuk menentukan laluan dylib relatif dalam cgo pada macOS

Bagaimana untuk menentukan laluan dylib relatif dalam cgo pada macOS

WBOY
WBOYke hadapan
2024-02-08 22:10:27708semak imbas

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

Menggunakan cgo pada macOS dan menentukan laluan dylib relatif adalah masalah biasa. cgo ialah alat yang digunakan oleh bahasa Go untuk berinteraksi dengan bahasa C, manakala dylib ialah perpustakaan pautan dinamik pada macOS. Menentukan laluan relatif menjadikan projek anda lebih fleksibel dan mudah alih. Jadi, bagaimanakah kita harus menentukan laluan dylib relatif dalam cgo pada macOS? Editor PHP Strawberry akan menjawab anda secara terperinci.

Kandungan soalan

Saya sedang cuba membuat dylib sedia ada yang ditulis dalam c berfungsi dalam go. Untuk ini saya menggunakan cgo dan semuanya disusun dengan betul. Apabila go build cuba menjalankan dyld boleh laku yang dijana, ia tidak dapat mencari dylib yang terletak dalam direktori sumber go.

Saya menggunakan cflag dan ldflag ini tanpa kejayaan:

// #cgo cflags: -i${srcdir}
// #cgo ldflags: -l. -lmylibrary

Saya juga mengetahui bahawa saya boleh menggunakan rentetan ajaib @executable_path untuk menentukan laluan carian perpustakaan relatif, tetapi menambahkannya pada -l atau cuba menambah -install_name pada bendera pemaut tidak menghasilkan sebarang hasil.

Ini ialah mesej ralat pemaut yang saya terima:

/Users/benedikt/sdk/go1.19.7/bin/go build -o /private/var/folders/.../T/GoLand/___1go_build_myapp myapp #gosetup
/private/var/folders/.../T/GoLand/___1go_build_myapp
dyld[58935]: Library not loaded: '/usr/local/lib/libMyLibrary.dylib'
  Referenced from: '/private/var/folders/.../T/GoLand/___1go_build_myapp'
  Reason: tried: '/usr/local/lib/libMyLibrary.dylib' (no such file), '/usr/lib/libMyLibrary.dylib' (no such file)

Walaupun tidak menambah sebarang langkah binaan di luar go, bagaimanakah saya boleh mengkonfigurasi cgo dengan betul untuk menggunakan dylib yang terletak dalam folder yang sama di mana binari akan berada kemudian supaya ia boleh dijalankan dengan go build?

Penyelesaian

Ternyata saya sangat hampir dengan matlamat saya, tetapi laluan carian yang disimpan dalam perpustakaan sebenar adalah salah.

Kod dalam soalan saya berfungsi dengan baik selepas mengubah suai perpustakaan seperti berikut:

install_name_tool -id @loader_path/libMyLibrary.dylib libMyLibrary.dylib

Walaupun saya tidak menemui cara yang bersih untuk membiarkan goland mengawal go build untuk menyalin perpustakaan saya ke direktori output aplikasi yang sedang berjalan, saya secara tentatif menyalin kebergantungan kepada output dengan menetapkan direktori output kepada laluan mutlak dan menambah Pra -perintah pelaksanaan untuk folder.

Atas ialah kandungan terperinci Bagaimana untuk menentukan laluan dylib relatif dalam cgo pada macOS. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Artikel ini dikembalikan pada:stackoverflow.com. Jika ada pelanggaran, sila hubungi admin@php.cn Padam