Rumah >pembangunan bahagian belakang >Golang >Bagaimana untuk Mengintegrasikan Fungsi Go ke dalam Projek C Sedia Ada Menggunakan GCCGO?
Menggunakan Go Within Projek C Sedia Ada
Latar Belakang:
Anda mempunyai program C yang terdiri daripada berbilang objek fail yang disimpan dalam fail arkib (.a). Anda berhasrat untuk menambah fail Go baharu pada projek, menyusunnya ke dalam fail objek dan memasukkannya ke dalam arkib sedia ada.
Objektif:
Sepadukan fungsi Go ke dalam C anda program.
Proses:
1. Susun Fail Go ke dalam Fail Objek:
Jalankan arahan berikut:
gccgo -c printString.go -o printString.o -fgo-prefix=print -Wall -Werror -march=native
2. Fungsi Call Go daripada C:
Dalam fail c_caller.c anda, isytiharkan fungsi luaran:
extern int PrintString(char*) __asm__ ("print.main.PrintString");
Dalam fungsi utama, panggil fungsi Go dan kendalikan hasilnya:
int result = PrintString(string_to_pass); if (result) { printf("Everything went as expected!\n"); } else { printf("Uh oh, something went wrong!\n"); }
3. Menggunakan GCCGO untuk Membina Keseluruhan Projek:
Jalankan arahan berikut:
gccgo -o main c_caller.c printString.o -Wall -Werror -march=native
4. Menangani Ralat:
Penyelesaian Alternatif dalam Go 1.5:
Dalam Go 1.5 (akan datang pada bulan Ogos), ciri baharu membolehkan penciptaan perpustakaan serasi C daripada kod Go. Dengan ciri ini, anda boleh membina pustaka statik atau kongsi terus daripada fail Go, menghapuskan keperluan untuk fail objek perantaraan.
Contoh:
Dalam main.c:
#include <stdio.h> int main() { char *string_to_pass = NULL; if (asprintf(&string_to_pass, "This is a test.") < 0) { printf("asprintf fail"); return -1; } PrintString(string_to_pass); return 0; }
Dalam main.go (disusun dengan go build -buildmode c-archive ... untuk statik atau go build -buildmode c-shared . .. untuk perpustakaan kongsi):
package main import "C" import "fmt" //export PrintString func PrintString(cs *C.char) { s := C.GoString(cs) fmt.Println(s) } func main() {}
Atas ialah kandungan terperinci Bagaimana untuk Mengintegrasikan Fungsi Go ke dalam Projek C Sedia Ada Menggunakan GCCGO?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!