我正在尝试在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环境中也可以通过选择正确的路径来工作。

为了获得理想的LDFLAGS行为,我需要在MacOS中做些特别的事情吗?

最佳答案

设置动态库加载路径。对于Mac,为Linux设置DYLD_LIBRARY_PATH LD_LIBRARY_PATH

关于go - CGO忽略了MacOS上的LDFLAGS -L选项,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/51283102/

10-13 09:19