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