1

我正在尝试使用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 包中没有找到对它的任何引用。

4

1 回答 1

1

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

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

为了解决我的问题,我刚刚在我的环境变量和此文件中将 LDFLAG中的参数从-lrocksdb重命名为-lrocksdb-shared

于 2018-05-15T11:29:51.023 回答