Windows上的cgo:加载dll的命名

时间:2018-05-15 10:28:56

标签: 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 ...命令
  • 我运行了测试文件,但收到错误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包中找不到任何引用。

1 个答案:

答案 0 :(得分:1)

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

我想我无法重命名已编译的dll,因为dll“引用”本身就是这个名字。所以它无法正常加载。

要解决我的问题,我只是在我的environement变量和file中将LDFLAG中的参数从 -lrocksdb 重命名为 -lrocksdb-shared