Bagaimana untuk Memanggil Fungsi dalam Fail Objek Statik dari Go?

Patricia Arquette
Lepaskan: 2024-11-03 12:04:29
asal
925 orang telah melayarinya

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>
Salin selepas log masuk

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!

sumber:php.cn
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