Rumah > pembangunan bahagian belakang > Golang > Bagaimanakah Saya Boleh Memanggil Fungsi Go daripada Program C Menggunakan `-buildmode=c-archive` Go 1.5?

Bagaimanakah Saya Boleh Memanggil Fungsi Go daripada Program C Menggunakan `-buildmode=c-archive` Go 1.5?

Linda Hamilton
Lepaskan: 2024-12-19 19:53:13
asal
718 orang telah melayarinya

How Can I Call Go Functions from a C Program Using Go 1.5's `-buildmode=c-archive`?

Memanggil Kod Go daripada Program C dengan Go 1.5

Dalam Go 1.5, ciri -buildmode=c-archive telah diperkenalkan untuk merapatkan kod Go kepada bukan Go persekitaran. Dengan ciri ini, anda boleh menyepadukan kod Go ke dalam projek C sedia ada, membolehkan anda mengagihkan tugas peringkat lebih tinggi kepada Go yang lebih verbose.

Mengeksport Fungsi Go untuk C Invocation

Untuk membuat Go. fungsi tersedia untuk kod C, anda mesti mengeksportnya secara eksplisit menggunakan komen //eksport khas.

package main

import (
    "C"
    "fmt"
)

//export PrintInt
func PrintInt(x int) {
    fmt.Println(x)
}

func main() {}
Salin selepas log masuk

Pengkompil Konfigurasi untuk Penggunaan C

Menyusun kod Go sebagai perpustakaan boleh panggil C memerlukan penggunaan bendera -buildmode=c-archive.

go build -buildmode=c-archive foo.go
Salin selepas log masuk

Arahan ini menjana perpustakaan statik (foo.a ) dan fail pengepala (foo.h) yang mengandungi pengisytiharan fungsi yang dieksport.

Menyepadukan ke dalam C Projek

Dalam projek C anda, masukkan fail pengepala yang dijana dan gunakan fungsi yang disediakan seperti berikut:

#include "foo.h"

int main(int argc, char **argv) {
    PrintInt(42);
    return 0;
}
Salin selepas log masuk

Penyusunan dan Pelaksanaan

Untuk menyusun atur cara C, gunakan bendera -pthread untuk sokongan benang yang betul.

gcc -pthread foo.c foo.a -o foo
Salin selepas log masuk

Menjalankan boleh laku kini akan mencetak yang dimaksudkan integer (42) ke konsol.

Atas ialah kandungan terperinci Bagaimanakah Saya Boleh Memanggil Fungsi Go daripada Program C Menggunakan `-buildmode=c-archive` Go 1.5?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan Laman Web ini
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
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan