Rumah  >  Artikel  >  pembangunan bahagian belakang  >  Bagaimana untuk Memanggil Fungsi dalam Fail Objek Statik dari Go?

Bagaimana untuk Memanggil Fungsi dalam Fail Objek Statik dari Go?

Patricia Arquette
Patricia Arquetteasal
2024-11-03 12:04:29927semak imbas

How to Call Functions in Static Object Files from Go?

Fungsi Memanggil dalam Fail Objek Statik daripada Go

Anda berusaha untuk menggunakan fungsi daripada fail perpustakaan kongsi (.so) dalam Go. Walaupun anda mungkin mengalami cadangan untuk menggunakan syscall.LoadLibrary untuk tujuan ini, percubaan anda telah dipenuhi dengan ralat "undefined: syscall.LoadLibrary."

Walau bagaimanapun, ia sememangnya boleh dilakukan untuk memuatkan perpustakaan dan akses kongsi. fungsinya daripada Go. Untuk mencapai ini pada platform POSIX, anda boleh memanfaatkan cgo dan berinteraksi dengan API asli sistem.

Berikut ialah demonstrasi mudah menggunakan cgo:

<code class="go">// +build linux darwin
// #cgo LDFLAGS: -ldl
// #include <dlfcn.h>

package main

import (
    "C"
    "fmt"
)

func foo() {
    // Load the shared library
    handle := C.dlopen(C.CString("libfoo.so"), C.RTLD_LAZY)

    // Retrieve the function pointer from the library
    bar := C.dlsym(handle, C.CString("bar"))

    // Print the function pointer address
    fmt.Printf("bar is at %p\n", bar)
}

func main() { foo() }</code>

Dalam ini contoh:

  • Arahan binaan mengehadkan kompilasi kepada Linux dan Darwin platform.
  • #cgo LDFLAGS: -ldl memautkan boleh laku kepada pustaka pemaut dinamik (libdl).
  • #include mengimport pengepala C yang diperlukan untuk fungsi dlopen dan dlsym.
  • Fungsi foo memuatkan pustaka kongsi, mendapatkan kembali penuding fungsi untuk fungsi "bar" dan mencetak alamatnya.

Perhatikan bahawa sintaks dan nama fungsi yang tepat mungkin berbeza-beza bergantung pada sistem dan pengkompil asas anda. Dengan menggunakan cgo dan berinteraksi dengan API sistem asli, anda boleh merapatkan jurang antara Go dan perpustakaan kongsi, memperluaskan keupayaan aplikasi anda.

Atas ialah kandungan terperinci Bagaimana untuk Memanggil Fungsi dalam Fail Objek Statik dari Go?. 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