cgo调用so文件, 报找不到错误

我是根据网上的教程来的, 可是最终都试不出结果.
目录结构
modT

lib
    vedio.c
    vedio.h
    vedio.so
main.go

vedio.c里面的内容:

#include <stdio.h>
#include "vedio.h"

int add(int a, int b){ // 实现
    return a + b;
}

so的生成命令是:gcc vedio.c -fPIC -shared -o vedio.so

main.go里面的代码:

package main

/*
#cgo CFLAGS: -Ilib
#cgo LDFLAGS: -Llib -lvedio
#include "vedio.h"
*/
import "C"  // 切勿换行再写这个

func main() {
    C.add(1,2)
}

go run main.go报错:

command-line-arguments

ld: library not found for -lvedio
clang: error: linker command failed with exit code 1 (use -v to see invocation)

请教下还有人知道啥原因, 感觉是个坑

阅读 2.9k
2 个回答
新手上路,请多包涵

好兄弟,解决了吗,我遇到了相同的问题!

新手上路,请多包涵

这里有个很深的坑;
正确的写法:编译成的.so 文件必须lib开头
LDFLAGS : -l 后面不带lib前缀

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
宣传栏