gpt4 book ai didi

windows - Windows 上的 cgo : naming of loaded dll

转载 作者:IT王子 更新时间:2023-10-29 02:09:50 25 4
gpt4 key购买 nike

我正在尝试使用 gorocksdb这是一个 cgo 包,在 windows 上交换 rocksdb 库。

  • 我用 vcpkg 构建了 rocksdb 库,它给我作为输出 rocksdb-shared.dll。我将构建路径设置为我的 PATH。
  • 我安装了 msys64 以便有 gcc
  • 我已经设置了 CGO_CFLAGS="-I/path/to/rocksdb/include"CGO_LDFLAGS="-L/path/to/rocksdb -lrocksdb -lstdc++ -lm -lz -lbz2 -lsnappy -llz4 -lzstd"
  • 我已将 rocksdb-shared.dll 重命名为 librocksdb.dll 因为链接器要求 dll 以 lib
  • 开头
  • 我执行 go get ... 命令
  • 我运行我的测试 go 文件并收到错误 The programer can't start because rocksdb-shared.dll is missing ...
  • 如果我将其重命名回 rocksdb-shared.dll,构建将失败,因为链接器找不到 librocksdb.dll
  • 让它工作的唯一方法是在 PATH 中同时拥有 rocksdb-shared.dlllibrocksdb.dll

为什么可执行文件不断加载 rocksdb-shared.dll?我在 cgo 包中找不到对它的任何引用。

最佳答案

我想我找到了问题的答案。

我想我不能重命名编译后的 dll,因为 dll“引用”本身作为这个名称。所以它不会正确加载。

为了解决我的问题,我只是在我的环境变量和这个 file 中将 LDFLAG 中的参数从 -lrocksdb 重命名为 -lrocksdb-shared

关于windows - Windows 上的 cgo : naming of loaded dll,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50347947/

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