Menyepadukan Fungsi Go ke dalam Program C
Mengintegrasikan fungsi Go ke dalam program C melibatkan membina fail Go ke dalam fail objek (.o) dan memasukkannya ke dalam fail arkib (.a) projek C sedia ada. Ini membenarkan memanggil fungsi Go dari dalam program C.
Isu Yang Dihadapi dalam Kod Contoh
Contoh yang disediakan oleh pengguna mempamerkan ralat semasa fasa pemautan. Ralat ini berpunca daripada salah faham di mana GCCGO menjangkakan fungsi utama dalam fail Go, tidak seperti program C.
Penyelesaian dengan Go 1.5 dan Beyond
In Go 1.5 dan versi kemudian, isu ini ditangani. Ia membolehkan membina perpustakaan serasi C menggunakan alat Go. Dengan ciri ini, pengguna boleh menyimpan fail C (main.c) seperti yang diberikan dalam soalan dan mengemas kini fail Go (main.go) seperti berikut:
<code class="go">package main import "C" import "fmt" //export PrintString func PrintString(cs *C.char) { s := C.GoString(cs) fmt.Println(s) } func main() {}</code>
Building a Go Fail Objek
Untuk membina fail Go ke dalam fail objek, jalankan arahan berikut:
go build -buildmode c-archive -o mygopkg.a
Menyepadukan ke dalam Projek C
Untuk memautkan fail objek Go dengan program C (_main.c), gunakan arahan berikut untuk membina binari akhir:
gcc -o main _main.c mygopkg.a -lpthread
Pendekatan Alternatif untuk Perpustakaan Dikongsi
Jika anda lebih suka membina perpustakaan kongsi dengan Go, arahan berikut akan mencipta mygopkg.so:
go build -buildmode c-shared -o mygopkg.so
Untuk memautkan perpustakaan kongsi dengan _main.c, jalankan arahan ini:
LD_RUN_PATH=$(pwd) gcc -o main _main.c mygopkg.so -lpthread
Nota: Tetapkan LD_RUN_PATH untuk memastikan pemaut mengesan pustaka kongsi dalam direktori semasa semasa masa jalan.
Untuk butiran dan pandangan lanjut, rujuk dokumen reka bentuk mod pelaksanaan Pergi .
Atas ialah kandungan terperinci Bagaimana untuk Mengintegrasikan Fungsi Go ke dalam Projek C Sedia Ada: Panduan Langkah demi Langkah dengan Penyelesaian untuk Menghubungkan Ralat?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!