windows - Windows 上的 cgo : naming of loaded dll

标签 windows go gcc cgo gccgo

我正在尝试使用 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/

相关文章:

android - React Native ERROR Packager 无法监听端口 8081

go - `append` 复杂度

c++ - 静态库的内容

windows - Macintosh 是否有像 Windows 一样基于消息的范例?

python - Tcl错误: invalid command name tcl_findLibrary

c - 当 WFP 标注驱动程序以 SERVICE_SYSTEM_START 启动时,FwpmEngineOpen 返回 EPT_NT_CANT_PERFORM_OP

objective-c - gcc 为 Objective C 定义

google-app-engine - Google App Engine Golang 返回 404 页面未找到

转到 fmt float64 问题

linux - 奇怪的 gcc 链接器搜索路径