方法一:go嵌入C代码
需要注意的是: import "C"和前面的注释必须紧挨着
package main
/*
int add(int a, int b)
{
return a+b;
}
*/
import"C"
import(
"fmt"
)
func main(){
fmt.Println("Hello World!")
fmt.Println(C.add(1,2))
}
方法二:直接嵌入C库函数
package main
/*
#include <stdlib.h>
*/
import "C"
import (
"fmt"
)
func main(){
fmt.Println("Hello World!")
fmt.Println(C.rand())
}
方法三:linux下调用C动态库
package main
/*
#cgo CFLAGS: -I .
#cgo LDFLAGS: -L . -lAdd
#include "add.h"
*/
import "C"
import(
"fmt"
)
func main(){
fmt.Println("Hello World!")
ret := int32(C.add(2,3))
if ret != 0 {
fmt.Println("1111")
}else{
fmt.Println("2222")
}
}
注意:运行时,需要将 so 路径配置好,最简单方式:
export LD_LIBRARY_PATH=.
然后将so 放在当前目录即可运行
方法四:linux下调用C静态库
package main
/*
#cgo CFLAGS: -I .
#cgo LDFLAGS: -L . -lAdd -static
#include "add.h"
*/
import "C"
import(
"fmt"
)
func main(){
fmt.Println("Hello World!")
ret := int32(C.add(2,3))
if ret != 0 {
fmt.Println("1111")
}else{
fmt.Println("2222")
}
}
和调用动态库的唯一区别是加了一个 -static 配置, 需要 .a 文件存在
方法五: windows下调用dll
未实验