问题描述
我写了一个golang代码,它调用了C库函数。但是,如果要针对其他操作系统(例如Linux / MacOS / Windows)进行交叉编译,该如何在#cgo CFLAGS
和#cgo LDFLAGS
中设置到库的自定义路径?
我尝试了这个示例:
// platform.go
package main
/*
#if defined(_WIN64)
#define LIB_PATH "lib/win64"
#elif defined(__linux__)
#define LIB_PATH "lib/linux"
#elif defined(__APPLE__) && defined(__MACH__) // Apple OSX and iOS (Darwin)
#define LIB_PATH "lib/darwin"
#endif
#cgo CFLAGS: -I./include
#cgo LDFLAGS: -L./${LIB_PATH} -lsaplinglib -lpthread -ldl
#include "saplinglib.h"
#include <stdlib.h>
#include <string.h>
#include <stdio.h>
// Return a name of platform,if determined,otherwise - an empty string
const char *get_platform_name() {
return (LIB_PATH == NULL) ? "" : LIB_PATH;
}
int test() {
puts(get_platform_name());
return 0;
}
*/
import "C"
import (
"fmt"
)
func main() {
fromC := C.int(0)
fromC = C.test()
fmt.Println(C.int(fromC))
}
但是它在输出中出错:
go run platform.go
/Users/satinder/example/platform.go: malformed #cgo argument: -L./${LIB_PATH}
例如,我的图书馆的树看起来像这样:
➜ example tree
.
├── include
│ └── saplinglib.h
├── lib
│ ├── darwin
│ │ └── libsaplinglib.a
│ ├── linux
│ │ └── libsaplinglib.a
│ └── win64
│ └── saplinglib.lib
└── platform.go
5 directories,5 files
我的编码环境是MacOS,所以我在MacOS / Darwin编译库中进行编码和测试。
但是我需要使这一切自动化,以便在Linux机器上交叉编译,以生成适用于Linux / MacOS / Windows的二进制文件。
我尝试查找与cgo相关的问题,建议尝试pkg-config
,但是答案并不清楚。万一我可以使用pkg-config
,有人可以为我的用例提供一些pkg-config内容示例吗?非常感谢您的帮助。
谢谢, 饱和物
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)