不幸的是,我沒有一臺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
上面的代碼應的文件夾/home/noj/clibs
爲發展本地安裝的taglib。如果您查看文件夾內部,可以找到bin
,lib
和include
的子目錄。
所以這裏是時髦的部分。 Windows標準是將動態lib文件(*.dll
)轉儲到bin
目錄中。一些開源庫遵守這一點,並做到這一點,其他人仍然將*.dll
文件轉儲到lib
目錄中,因爲這是他們通常在Unix系統中進行的。您需要查看安裝時生成的lib
目錄,並將生成的所有*.dll
文件複製到bin
目錄中,以確保正確鏈接的發生沒有過多的嘲諷。
現在就去找源碼吧!在源代碼頂部,您需要包含cgo
元註釋,以告訴Go搜索所需庫的位置以及它們的頭文件(安裝期間生成的include
目錄)。下面是嘗試使用上面我們剛剛建好的庫的一些圍棋來源:
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
圍棋的源目錄中的代碼。
可能出現的問題:
所以,你可能會遇到是查不到的,你不必在Windows中建立的taglib必要的庫,儘管它聽起來像你已經建立了它的一些問題,所以那應該沒問題。您會注意到,在源代碼中,我爲標準C++庫添加了LDFLAG
。這是因爲taglib使用C++。如果事實證明這是一個問題,我會創建一個簡單的C程序以及與C++庫交互的代碼,併爲它創建一個C接口。根據我的經驗,使用C庫和Go比使用C++和Go更容易。
來源
2013-05-11 02:34:28
noj
[this](https://github.com/AllenDang/w32)有幫助嗎?它不使用cgo,而是使用它:'syscall.NewLazyDLL(「ole32.dll」)'。這很有用,因爲它可以輕鬆交叉編譯(我不使用Windows,所以這是一個主要優點)。但我不知道這是否會對您的圖書館有效。 – tjameson 2013-05-14 16:51:01
@tjameson我肯定會在今晚或明天給你一個好看的。謝謝! – Lander 2013-05-14 22:39:56