Rumah >pembangunan bahagian belakang >Golang >Bagaimana untuk Mengintegrasikan Fungsi Go ke dalam Projek C Sedia Ada: Panduan Langkah demi Langkah dengan Penyelesaian untuk Menghubungkan Ralat?

Bagaimana untuk Mengintegrasikan Fungsi Go ke dalam Projek C Sedia Ada: Panduan Langkah demi Langkah dengan Penyelesaian untuk Menghubungkan Ralat?

Susan Sarandon
Susan Sarandonasal
2024-10-27 12:10:021039semak imbas

How to Integrate Go Functions into Existing C Projects: A Step-by-Step Guide with Solutions for Linking Errors?

Cara Menggunakan Go dalam Projek C Sedia Ada

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!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn