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
Linda Hamiltonasal
2024-12-19 19:53:13640semak imbas

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() {}

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

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;
}

Penyusunan dan Pelaksanaan

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

gcc -pthread foo.c foo.a -o foo

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:
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