我正在尝试在MacOS计算机上编译以下代码
// #cgo darwin LDFLAGS: -L${SRCDIR}/build/darwin -lprocessing_lib
// #cgo linux LDFLAGS: -L${SRCDIR}/build/linux -lprocessing_lib
// #include "Processing-bridge.h"
// #include <stdlib.h>
import "C"
import "unsafe"
type ProcessorWrapper struct {
ptr unsafe.Pointer
}
func init() {
pr.ptr = C.NewProcessor()
}
func GetDefault() (id int, name string) {
var default = C.GetDefault(pr.ptr)
id = int(default.materialId)
name = C.GoString(default.name)
return
}
我在LDFLAGS中定义的正确位置中有libprocessing_lib.so文件。但是,编译器仍然会抛出错误信息
dyld: Library not loaded: build/lib_processing_lib.so
Referenced from: /Users/ag/workspace/src/github.com/apremalal/pq-processor/./pq-processor
Reason: image not found
一旦我将build / lib_processing_lib.so复制到它可以工作的项目的根目录中。
似乎LDFLAGS提供的库目录已被覆盖。
我注意到在编译之前设置DYLD_LIBRARY_PATH变量也将覆盖此值。(我在上述方案中运行时未设置此参数)
有趣的是,尽管相同的代码在Linux环境中也可以通过选择正确的路径来工作。
在MacOS中我需要做些特别的事情来获得理想的LDFLAGS行为吗?
答案 0 :(得分:0)
设置动态库加载路径。对于Mac,为Linux DYLD_LIBRARY_PATH
设置LD_LIBRARY_PATH