Go的共享庫?
回答
這是可能的,現在使用-linkshared標誌
你需要做的就是先運行此命令:(!上面的代碼,使所有通用的軟件包共享)
go install -buildmode=shared -linkshared std
然後
go install -buildmode=shared -linkshared userownpackage
最後在編譯你的代碼時你需要運行:
go build -linkshared yourprogram
上面這些現在是什麼,而不是靜態鏈接所有東西只動態鏈接它們,你會最終得到更小的編譯文件。只是給你一個想法,我的靜態鏈接「hello.go」文件是2.3MB,而使用動態鏈接的相同代碼只有12KB!
顯然,它現在是可能的,但只有在非常精確的情況下。更確切地說,如果您正在爲Android平臺編寫代碼。
GitHub上的「goandroid」項目提供了一組補丁程序,允許Go爲Android NDK特定使用構建一個共享庫。見https://github.com/eliasnaur/goandroid
截至現在(2013年7月),它是Go Tools的擴展,並未嵌入到Google發佈的Go Tools中。 – Nate 2013-07-13 04:02:35
@Nate你能鏈接到擴展名嗎? (獨立的)擴展只能在android上使用,還是可以在桌面上使用? – 2015-07-08 19:57:16
@mihaistancu我想它不會太難交叉編譯去Android,看看[這裏](https://jasonplayne.com/programming-2/how-to-cross-compile-golang-for-android )。考慮到golang 1.5支持iOS,可以很快獲得官方支持。 – Nate 2015-07-09 21:37:30
Go Execution Modes介紹大廈轉到包作爲共享庫:
「在這種模式下圍棋包,或一組包,也可以作爲共享庫導入一個或Go程序。更多的Go包可能會與這個共享庫鏈接,共享庫可能會在Go程序鏈接到運行時間之間更改;程序啓動時可用的共享庫將是使用...
在Go 1.5發行版中,這僅針對linux-amd64目標實現。使用gccgo它可以針對任何支持的目標實現。「
我回到這個問題來寫更新了。 +1 – 2015-08-27 10:19:56
現在可能!我使用Go構建了一個.so文件,然後很容易地導入python!以下是我喜歡的文章:http://www.darkcoding.net/software/building-shared-libraries-in-go-part-1/
- 1. 與GO共享.Net庫
- 2. 共享庫中的Block Go例程
- 3. 將共享庫鏈接到共享庫
- 4. AppEngine-Go模塊必須共享相同的代碼庫
- 5. 在Go主機之間共享變量
- 6. 如何在Go中調用Linux共享庫函數?
- 7. 共享庫App.Config
- 8. Websphere共享庫
- 9. 共享庫
- 10. TFS共享庫
- 11. 共享庫
- 12. 共享庫websphere
- 13. Linux共享庫
- 14. 共享庫 - .so
- 15. cmake共享庫
- 16. linux共享c庫不共享
- 17. 共享庫文本段不可共享
- 18. 不與共享庫共享所有類
- 19. 共享庫中的pstack(c/C++)。損壞的共享庫
- 20. 共享公共彈簧庫
- 21. 將共享庫共享到共享內存
- 22. 使用共享庫的Linux共享庫未定義符號
- 23. 加載使用其他共享庫的共享庫
- 24. 鏈接共享庫與Linux中的另一個共享庫
- 25. 使用與其他共享庫鏈接的共享庫
- 26. 鏈接一個共享庫靜態到我的共享庫
- 27. 通過共享庫
- 28. NLog,Elmah +共享庫
- 29. 共享庫安裝
- 30. 共享數據庫
正確的答案。 – 0x90 2016-02-20 05:32:11
這就是我一直在尋找的東西。但是在我的mac上給出了'-buildmode = shared不支持darwin/amd64'。 – lvle 2017-05-06 16:40:36