Rumah > pembangunan bahagian belakang > Golang > Bagaimanakah Saya Boleh Mengintegrasikan Kod Go ke dalam Projek C Sedia Ada Saya?

Bagaimanakah Saya Boleh Mengintegrasikan Kod Go ke dalam Projek C Sedia Ada Saya?

DDD
Lepaskan: 2024-12-17 18:48:13
asal
518 orang telah melayarinya

How Can I Integrate Go Code into My Existing C Project?

Mengintegrasikan Kod Go ke dalam Projek C Sedia Ada

Soalan:
Adakah mungkin untuk memanggil kod Go daripada program C, dan jika ya, bagaimana ini boleh berlaku tercapai?

Jawapan:
Ya, Go 1.5 memperkenalkan mod -buildmode=c-archive, yang membolehkan kod Go disusun ke dalam arkib yang sesuai untuk dipautkan ke program C. Untuk menyepadukan kod Go ke dalam projek C sedia ada:

  1. Fungsi Tanda untuk Eksport:

    • Fungsi yang dimaksudkan untuk dipanggil daripada C mesti ditandakan dengan //export komen dalam kod Go.
    • Pastikan pakej Go yang mengandungi fungsi ini dinamakan utama.
    • Sertakan fungsi bernama utama, walaupun ia kosong.
    • Import pakej C.
  2. Kompilasi Arkib Go:

    • Kompilkan kod Go ke dalam Pustaka statik boleh panggil C menggunakan arahan berikut:

      go build -buildmode=c-archive foo.go
      Salin selepas log masuk
      Salin selepas log masuk
    • Ini akan menjana arkib dan fail pengepala (cth., foo.a dan foo.h).
  3. Pautan C Program:

    • Dalam program C, masukkan fail pengepala yang dijana:

      #include "foo.h"
      Salin selepas log masuk
    • Pautan terhadap arkib Go menggunakan -pilihan pthread:

      gcc -pthread foo.c foo.a -o foo
      Salin selepas log masuk
      Salin selepas log masuk
    • Ini akan membolehkan program C memanggil Go yang dieksport fungsi.

Contoh:

Pertimbangkan kod Go berikut (foo.go):

package main

import "C"
import "fmt"

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

func main() {}
Salin selepas log masuk

Kompilasikannya ke dalam arkib:

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

Kemudian, dalam program C (foo.c):

#include "foo.h"

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

Kompilasikannya:

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

Menjalankan foo akan mencetak "42".

Atas ialah kandungan terperinci Bagaimanakah Saya Boleh Mengintegrasikan Kod Go ke dalam Projek C Sedia Ada Saya?. 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
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan