go語言靜態庫的編譯和使用

2021-08-22 10:39:12 字數 1924 閱讀 9601

本文主要介紹go語言靜態庫的編譯和使用方法,以windows平台為例,linux平台步驟一樣,具體環境如下:

>echo %gopath%

e:\share\git\go_practice\

>echo %goroot%

c:\go\

>tree /f %gopath%\src

卷 work 的資料夾 path 列表

卷序列號為 0009-d8c8

e:\share\git\go_practice\src

│ main.go

│└─demo

demo.go

在%gopath%\src目錄,有demo包和使用demo包的應用程式main.go,main.go**如下:

package main

import "demo"

func main()

demo包中的demo.go**如下:

package demo

import "fmt"

func demo()

由於demo.go是在%gopath%\src目錄下的乙個包,main.go在import該包後,可以直接使用,執行main.go:

>go run main.go

call demo ...

現在,需要將demo.go編譯成靜態庫demo.a,不提供demo.go的源**,讓main.go也能正常編譯執行,詳細步驟如下:

go install demo
在命令列執行go install demo命令,會在%gopath%目錄下生相應的靜態庫檔案demo.a(windows平台一般在%gopath%\src\pkg\windows_amd64目錄)。

進入main.go所在目錄,編譯main.go:

>go tool compile -i e:\share\git\go_practice\pkg\windows_amd64 main.go
-i選項指定了demo包的安裝路徑,供main.go匯入使用,即e:\share\git\go_practice\pkg\win 

dows_amd64目錄,編譯成功後會生成相應的目標檔案main.o。

go tool link -o main.exe -l e:\share\git\go_practice\pkg\windows_amd64 main.o
-l選項指定了靜態庫demo.a的路徑,即e:\share\git\go_practice\pkg\win 

dows_amd64目錄,鏈結成功後會生成相應的可執行檔案main.exe。

>main.exe

call demo ...

現在,就算把demo目錄刪除,再次編譯鏈結main.go,也能正確生成main.exe:

>go tool compile -i e:\share\git\go_practice\pkg\windows_amd64 main.go

>go tool link -o main.exe -l e:\share\git\go_practice\pkg\windows_amd64 main.o

>main.exe

call demo ...

但是,如果刪除了靜態庫demo.a,就不能編譯main.go,如下:

>go tool compile -i e:\share\git\go_practice\pkg\windows_amd64 main.go

main.go:3: can't find import: "demo"

以上就是go語言靜態庫的編譯和使用方法,下次介紹動態庫的編譯和使用方法。

go語言靜態庫的編譯和使用

echo gopath e share git go practice echo goroot c go tree f gopath src 卷 work 的資料夾 path 列表 卷序列號為 0009 d8c8 e share git go practice src main.go demo de...

go語言靜態庫的編譯和使用

本文主要介紹go語言靜態庫的編譯和使用方法,以windows平台為例,linux平台步驟一樣,具體環境如下 echo gopath e share git go practice echo goroot c go tree f gopath src 卷 work 的資料夾 path 列表 卷序列號為...

NDK 編譯和使用靜態庫 動態庫

ndk 編譯和使用靜態庫 動態庫 情況一 編譯靜態庫 情況二 編譯動態庫 情況三 編譯動態庫 靜態庫 情況四 已有第三方靜態庫 動態庫 編譯靜態庫 動態庫 預設所有 和檔案在 project jni下,否則特殊說明。情況一 編譯靜態庫 檔案android.mk local path call my ...