残念ながら、私はこれを自分で試すことができる Windows マシンを持っていませんが、理論的にはこれでうまくいくはずです。リストした手順は UNIX の観点から書かれていますが、特に断りのない限り、Windows に直接変換できるはずです。Windows の場合、いくつかの便利な UNIX ツールが付属しているため、端末にGitBashを使用するのが好きです。
とにかく、私は仮定をしていないことを確認するために、プロセス全体に取り組みます. まず、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
ます。
ここがファンキーな部分です。*.dll
Windows の標準では、動的 lib ファイル ( ) をbin
ディレクトリにダンプします。一部のオープン ソース ライブラリはこれに準拠して実行しますが、他のライブラリ*.dll
はディレクトリにファイルをダンプしますlib
。これは、通常、Unix システムでファイルが移動する場所だからです。インストールによって生成されたディレクトリを確認し、生成されたすべてのファイルをディレクトリにlib
コピーして、あまりハッカーを使わずに適切なリンクが行われるようにする必要があります。*.dll
bin
それではソースコードをどうぞ!ソース コードの先頭に、必要cgo
なライブラリを検索する場所とそのヘッダー (include
インストール中に生成されるディレクトリ) を Go に指示するメタ コメントを含める必要があります。上で構築したばかりのライブラリを使用しようとする 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() {
// ...
}
*.dll
現在、Windows では、ファイルが存在するディレクトリを に追加する必要もありますPATH
。そのため、先に進みます...
/home/noj $ export PATH=$PATH:/home/noj/clibs/bin
go build
これで、Go のソース ディレクトリ内を使用して通常通りコードをコンパイルする準備が整いました。
考えられる問題:
そのため、Windows で taglib をビルドするために必要なライブラリがないことに遭遇する可能性がありますが、既にビルド済みのように思えますが、それで問題ないはずです。LDFLAG
go ソースに、標準の C++ ライブラリ用のを追加したことに気付くでしょう。これは、taglib が C++ を使用しているためです。これが問題であることが判明した場合、私はあなたの go コードと一緒に、c++ ライブラリーとインターフェースを取り、そのための C インターフェースを作成する単純な C プログラムを作成します。私の経験からすると、C++ と Go を使用するよりも、C ライブラリと Go を使用する方がはるかに簡単です。