Go 釋出二進位制包的方法
眾所周知,Go的編譯系統是針對原始碼的,如果想釋出一個二進位制檔案給別人,該怎麼做?如何在CI上編譯不同平臺的C程式碼?
下面跟我一起來實驗下:
建立好專案 在src目錄下建立兩個包路徑,liba 和 main,liba用來實驗隱藏程式碼
- 專案各檔案如下
- liba/dummy.go, 呼叫程式碼先註釋掉,避免衝突
- 專案各檔案如下
package liba
import (
"fmt"
)
func libdummy() {
fmt.Println("this is in dummy lib")
}
// func LibTest() {
// fmt.Println("dummy library")
// libdummy()
// }
- liba/real.go
package liba
import (
"fmt"
)
func libreal() {
fmt.Println("this is in real lib")
}
func LibTest() {
fmt.Println("real library")
libreal()
}
- main/main.go
package main
import (
"liba"
)
func main() {
liba.LibTest()
}
3. 好了,我們先編譯真實的library, 得到.a 檔案,並跑下看看
go install ./...
~/exercises/golib: bin/main
real library
this is in real lib
將真實的library 拷貝出來備用
cp pkg/darwin_amd64/liba.a .
將real.go 的程式碼註釋掉,dummy.go 的程式碼取消註釋,並編譯跑下看看
~/exercises/golib: bin/main dummy library this is in dummy lib
- 見證奇蹟的時刻到了,我們把real.go 的實現給copy回來,編譯跑下看看
~/exercises/golib: cp liba.a pkg/darwin_amd64
~/exercises/golib: go install ./...
~/exercises/golib: bin/main
real library
this is in real lib
通過這個實驗,可以看出go最後的連結步驟是比較程式碼和.a檔案的建立時間,如果.a 建立的晚,就不會再次對程式碼進行編譯,只做連結。大家可以將上面的cp 換成mv驗證下 :) 總結下,如果想釋出二進位制的go library,就要將.a 檔案和 stub 程式碼一起交付給使用者,並且在編譯的時候做一次替換。
如果有些軟體需要跨平臺編譯,而且還有些底層訪問的C程式碼,可以先編譯成.a 檔案,然後放到CI 平臺上,讓Go交叉編譯的時候連結就好了。
相關文章
- 二進位制轉十進位制快速方法
- 輸出二進位制數
- 二進位制,八進位制,十進位制,十六進位制的相互轉換
- 二進位制與二進位制運算
- JS操作二進位制方法 - blobJS
- 二進位制陣列 subarray() 方法陣列
- java中二進位制、八進位制、十進位制、十六進位制的轉換Java
- 二進位制,八進位制,十進位制,十六進位制之間的轉換
- 進位制詳解:二進位制、八進位制和十六進位制
- JavaScript 二進位制、八進位制與十六進位制JavaScript
- 【Redis】原始碼編譯二進位制包Redis原始碼編譯
- 如何把十進位制的數輸入用二進位制全加器,並以十進位制輸出
- Go語言實現十進位制轉換成二、八、十六進位制Go
- printf十六進位制輸出64位值的方法
- 二進位制
- (二進位制)
- 十進位制——二 (八、十六 )進位制
- 讀入寫出,轉二進位制
- 【進位制轉換】二進位制、十六進位制、十進位制、八進位制對應關係
- C++輸入十進位制數,輸出對應二進位制數、十六進位制數C++
- 進位制之間的轉換之“十六進位制 轉 十進位制 轉 二進位制 方案”
- 二進位制、十進位制與十六進位制相互轉化
- 03二進位制包安裝與介紹
- 計算機基礎進位制轉換(二進位制、八進位制、十進位制、十六進位制)計算機
- JAVA 二進位制,八進位制,十六進位制,十進位制間進行相互轉換Java
- 什麼是二進位制?二進位制如何轉換?
- Cocoapods 二進位制
- 04 二進位制
- leetcode -- 二進位制LeetCode
- JS的二進位制操作JS
- JavaScript十進位制轉換為二進位制JavaScript
- 十進位制轉二進位制推導(草稿)
- [計算機基礎] 計算機進位制轉換:二進位制、八進位制、十進位制、十六進位制計算機
- Java中8進位制和16進位制的表示方法Java
- printf()將10進位制數安照輸出16進位制,8進位制輸出
- 一看就懂二進位制、八進位制、十六進位制數轉換十進位制
- 編譯好的arm版的phantomjs2.1.1二進位制包編譯JS
- 整數轉化成八進位制、十六進位制、二進位制,以及轉回
- 進位制與二進位制及相關轉換