Go語言非main包編譯為靜態庫并使用的示例代碼_第1頁
Go語言非main包編譯為靜態庫并使用的示例代碼_第2頁
Go語言非main包編譯為靜態庫并使用的示例代碼_第3頁
Go語言非main包編譯為靜態庫并使用的示例代碼_第4頁
全文預覽已結束

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

第Go語言非main包編譯為靜態庫并使用的示例代碼Go語言項目中基本上都是以源碼的形式提供包,對公司或者企業而言,如果想要隱藏關鍵代碼怎么辦?

我們可以將Go的非main包編譯為靜態庫提供給用戶使用。下面以Windows為例,介紹一下如何將Go的非main包編譯為靜態庫,用戶又將如何使用。

筆者使用的VSCode,在終端中查看Go的環境變量,主要看GOROOT以及GOPATH,筆者的GOROOT在C:\ProgramFiles\Go。

二、常規工程

在任意地方新建一個目錄,假設為test,然后使用VSCode打開。我們創建如下3個工程文件:

main.go

packagemain

import(

"test/libDemo"

funcmain(){

libDemo.CallMe()

}

go.mod

moduletest

go1.16

libDemo.go

packagelibDemo

import"fmt"

funcCallMe(){

fmt.Println("libDemoBeCall...")

}

目錄結構如下圖所示:

在main.go文件窗口,按F5運行,可以看到正常執行結果:

三、將libDemo編譯為靜態庫

1.移動libDemo

將libDemo目錄移動到${GOROOT}\src下,筆者的為C:\ProgramFiles\Go\src。此時再運行會報錯了:

主要是import的路徑不對了,把test/去掉即可。

2.編譯libDemo為靜態庫

$goinstalllibDemo

此時可以在C:\ProgramFiles\Go\pkg\windows_amd64中看到相應的靜態庫文件libDemo.a

3.將libDemo源碼從C:\ProgramFiles\Go\src移動走,即模擬用戶沒有源碼,只有靜態庫的情況。

此時再運行又會出現找不到libDemo的錯誤,不能直接運行了。

4.編譯main.go

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

gotoolcompile-I"C:\ProgramFiles\Go\pkg\windows_amd64"main.go

在編譯時需要加入-I選項包含目錄路徑"C:\ProgramFiles\Go\pkg\windows_amd64",路徑中有空格需要加引號,編譯成功后會生成main.o

5.鏈接main.o

gotoollink-otest.exe-L"C:\ProgramFiles\Go\pkg\windows_amd64"main.o

-L選項指定鏈接時搜索的庫路徑,鏈接成功會生成test.exe

6.運行test.exe

可以看到正常輸出:

$./test.exe

libDemoBeCall...

如果我們把C:\ProgramFiles\Go\pkg\windows_amd64\libDemo.a刪除,再鏈接就會報錯:

C:\ProgramFiles\Go\pkg\tool\windows_amd64\link.exe:cannotopenfileC:\ProgramFiles\Go\pkg\windows_amd64\libDemo.a:openC:\Progra

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經權益所有人同意不得將文件中的內容挪作商業或盈利用途。
  • 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
  • 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論