我正在尝试在Golang中包装一个C库。我正在尝试在已编译的库中调用C函数。我同时拥有一个.a文件和一个.so库文件。

我需要在哪里放置库文件,如何告诉cgo我正在使用这些库?

我是C语言的新手。非常感谢您的帮助。

最佳答案

我将通过以下示例进行解释:

首先使用libhello.a构建./libs/m.c:

#include <stdint.h>

extern uint64_t Add(uint64_t a, uint64_t b) {
    return a + b;
}

对于此测试样本,libhello.a./libs/内部:
m.go
└───libs
    m.c
    libhello.a

然后go build这个m.go工作示例:
package main

//#cgo LDFLAGS: -L${SRCDIR}/libs -lhello
//#include <stdint.h>
//extern uint64_t Add(uint64_t a, uint64_t b);
import "C"

import (
    "fmt"
)

func main() {
    fmt.Println(C.Add(C.uint64_t(10), C.uint64_t(20))) // 30
}

输出:
30

关于c - 无法在Golang应用程序中使用通过cgo编译的C库?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/39251045/

10-11 22:57
查看更多