cgo on windows : 加载的 dll 的命名
cgo on windows : naming of loaded dll
我正在尝试使用 gorocksdb,这是一个在 windows 上交换 rocksdb 库的 cgo 包。
- 我用 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 ...
命令
- 我 运行 我的测试文件,我收到错误
The programer can't start because rocksdb-shared.dll is missing ...
- 如果我将其重命名回 rocksdb-shared.dll 构建失败,因为链接器找不到 librocksdb.dll
- 让它工作的唯一方法是同时拥有 rocksdb-shared.dll 和 librocksdb.dll路径
为什么可执行文件一直在加载 rocksdb-shared.dll?我在 cgo 包中没有找到任何对它的引用。
我想我找到了问题的答案。
我想我不能重命名编译后的dll,因为dll "reference" 本身就是这个名字。所以它不会正确加载。
为了解决我的问题,我刚刚在我的环境变量中将 LDFLAG 中的参数从 -lrocksdb 重命名为 -lrocksdb-shared在这个 file
我正在尝试使用 gorocksdb,这是一个在 windows 上交换 rocksdb 库的 cgo 包。
- 我用 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 ...
命令 - 我 运行 我的测试文件,我收到错误
The programer can't start because rocksdb-shared.dll is missing ...
- 如果我将其重命名回 rocksdb-shared.dll 构建失败,因为链接器找不到 librocksdb.dll
- 让它工作的唯一方法是同时拥有 rocksdb-shared.dll 和 librocksdb.dll路径
为什么可执行文件一直在加载 rocksdb-shared.dll?我在 cgo 包中没有找到任何对它的引用。
我想我找到了问题的答案。
我想我不能重命名编译后的dll,因为dll "reference" 本身就是这个名字。所以它不会正确加载。
为了解决我的问题,我刚刚在我的环境变量中将 LDFLAG 中的参数从 -lrocksdb 重命名为 -lrocksdb-shared在这个 file