1 回答

TA贡献1866条经验 获得超5个赞
cgo 文档中的以下问题是:
在文件中使用 //export 会对前导码施加限制:由于它被复制到两个不同的 C 输出文件中,因此它不能包含任何定义,只能包含声明。如果文件同时包含定义和声明,则两个输出文件将生成重复的符号,并且链接器将失败。为避免这种情况,必须将定义放在其他文件的序言中,或放在 C 源文件中。
移动线条
extern void Setup(char *, char *, char *, char *, char *, char *);
extern char *Auth(char *, char *);
到 该文件和 C 定义将生成以下成功构建的前导码:locksmith.hlocksmith.c
/*
#cgo CFLAGS: -I/usr/local/bin/jdk-15.0.1/include -I/usr/local/bin/jdk-15.0.1/include/linux
#include "locksmith.h"
*/
import "C"
的开头将包含以下内容:locksmith.c
#include <string.h>
#include <jni.h> // JNI header provided by JDK
#include "locksmith.h"
#include "yada_yada_locksmith_Locksmith.h"
此外,构建命令需要只是
go build -o liblocksmith.so -buildmode=c-shared
没有在最后。locksmith.go
- 1 回答
- 0 关注
- 181 浏览
添加回答
举报