在Ubuntu下,使用Golang编译生成动态库(.so文件)需要遵循以下步骤:
hello.go,并编写你的Go代码。在这个例子中,我们将创建一个简单的函数,用于返回一个字符串:package main
import "C"
//export Hello
func Hello() string {
return "Hello from Go!"
}
func main() {}
注意,我们使用了//export注释来导出Hello函数,使其可以在C代码中调用。同时,我们导入了C包,这是Go与C语言交互所必需的。
go build命令编译Go代码为动态库。在终端中,导航到包含hello.go文件的目录,然后运行以下命令:go build -o libhello.so -buildmode=c-shared hello.go
这将生成一个名为libhello.so的动态库文件。
main.c),并编写以下代码来调用Hello函数:#include <stdio.h>
#include <dlfcn.h>
typedef const char* (*hello_func)();
int main() {
void* handle = dlopen("./libhello.so", RTLD_LAZY);
if (!handle) {
fprintf(stderr, "%s\n", dlerror());
return 1;
}
hello_func hello = (hello_func)dlsym(handle, "Hello");
if (!hello) {
fprintf(stderr, "%s\n", dlerror());
dlclose(handle);
return 1;
}
printf("%s\n", hello());
dlclose(handle);
return 0;
}
main.c文件的目录,然后运行以下命令:gcc -o main main.c -ldl
这将生成一个名为main的可执行文件。
./main
你应该看到输出Hello from Go!,这表明你已经成功地从Go代码生成了一个动态库,并在C程序中调用了它。