不幸的是,我自己没有可用的 Windows 机器来尝试这个,但从理论上讲,这应该可以工作。我列出的步骤是用 unix 视角编写的,但除非另有说明,否则它应该可以直接翻译到 Windows。对于 Windows,我喜欢在终端上使用GitBash,因为它带有一些有用的 unix 工具。
无论如何,我将完成整个过程,以确保我没有做出任何假设。首先,我们将从下载和安装 taglib 开始。假设您已经下载了他们可用的1.8 tarball,那么我会将其安装在本地计算机的某个文件夹中:
/home/noj $ mkdir -p clibs/src
/home/noj $ cd clibs/src
/home/noj/clibs/src $ tar -xvf /home/noj/Downloads/
/home/noj/clibs/src $ cd taglib-1.8
/home/noj/clibs/src/taglib-1.8 $ cmake -DCMAKE_INSTALL_PREFIX=/home/noj/clibs -DCMAKE_RELEASE_TYPE=Release .
/home/noj/clibs/src/taglib $ make
/home/noj/clibs/src/taglib $ make install
上面的代码应该在本地安装 taglib 用于开发文件夹中/home/noj/clibs
。如果您查看文件夹的内部,您会发现bin
、lib
和的子目录include
。
所以这是时髦的部分。Windows 标准是将动态库文件 ( *.dll
) 转储到bin
目录中。一些开源库坚持这一点并做到这一点,其他人仍然将*.dll
文件转储到lib
目录中,因为这是它们通常在 Unix 系统中去的地方。您需要查看lib
安装生成的目录并将生成的所有*.dll
文件复制到该bin
目录,以确保正确链接发生而没有太多的黑客行为。
现在获取源代码!在源代码的顶部,您需要包含cgo
元注释以告诉 Go 在哪里搜索您想要的库,以及它们的标头(include
安装期间生成的目录)。下面是一些尝试使用我们刚刚在上面构建的库的 Go 源代码:
package main
/*
#cgo LDFLAGS: -L/home/noj/clibs/lib -ltag -lstdc++
#cgo CFLAGS: -I/home/noj/clibs/include/taglib
#include <taglib.h>
*/
import "C"
import (
// normal imports
// ...
)
func main() {
// ...
}
现在,Windows 还要求您将*.dll
文件所在的目录添加到您的PATH
.
/home/noj $ export PATH=$PATH:/home/noj/clibs/bin
现在我们应该准备好在go build
Go 的源目录中正常使用编译代码了。
可能的问题:
因此,您可能遇到的一些问题是发现您没有在 Windows 中构建 taglib 所需的库,尽管听起来您已经构建了它,所以应该没问题。您会注意到,在 go 源代码中,我添加了LDFLAG
标准 c++ 库。这是因为 taglib 使用 C++。如果这被证明是一个问题,我将在您的 go 代码旁边创建一个简单的 C 程序,该程序与 c++ 库接口并为其创建一个 C 接口。根据我的经验,使用 C 库和 Go 比使用 C++ 和 Go 要容易得多。