gpt4 book ai didi

go - CGO 忽略 MacOS 上的 LDFLAGS -L 选项

转载 作者:IT王子 更新时间:2023-10-29 00:47:51 33 4
gpt4 key购买 nike

我正在尝试在 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 行为吗?

最佳答案

设置动态库加载路径。Mac设置DYLD_LIBRARY_PATH for linux LD_LIBRARY_PATH

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

33 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com