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

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

Barbara Streisand
Barbara Streisandasal
2024-12-20 17:23:14387semak imbas

How Can I Integrate Go Code into Existing C Projects?

Menyepadukan Kod Go ke dalam Projek C Sedia Ada

Sebelum Go 1.5, menyepadukan kod Go ke dalam projek C adalah mencabar. Walau bagaimanapun, dengan pengenalan bendera -buildmode=c-archive, adalah mungkin untuk memanggil kod Go dari dalam program C.

Untuk menjana fail pengepala dan arkib yang diperlukan untuk memaut dengan kod C, ikuti ini langkah:

  1. Buat fail sumber Go dengan fungsi yang anda ingin dedahkan kepada C.
  2. Tandakan fungsi yang dieksport dengan //eksport komen.
  3. Gunakan arahan berikut untuk membina perpustakaan statik boleh panggil C:
go build -buildmode=c-archive <Go_source_file>.go

Ini akan menjana arkib (mis., foo.a ) dan fail pengepala (cth., foo.h).

Dalam kod C anda, masukkan fail pengepala yang dijana dan gunakan fungsi yang dieksport mengikut konvensyen penamaan CGo. Contohnya:

#include "foo.h"

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

Untuk menyusun atur cara C, gunakan arahan seperti:

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

Nota Tambahan:

  • Fungsi utama dalam fail sumber Go diperlukan, walaupun kosong.
  • Gunakan pilihan -pthread semasa menyusun Atur cara C kerana masa jalan Go menggunakan benang.
  • Anda boleh menentukan nama fail arkib dan pengepala output masing-masing menggunakan bendera -o dan -I, semasa membina pustaka.

Atas ialah kandungan terperinci Bagaimanakah Saya Boleh Mengintegrasikan Kod Go ke dalam Projek C Sedia Ada?. 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