我正在構建使用CGo的代碼,此代碼必須被編譯爲共享或靜態庫(靜態是高度優選的)。 (code for reference)轉到代碼編譯鏈接器錯誤。我可以手動鏈接嗎?
它在Linux和Mac上都可以正常工作,但是在Windows上它在鏈接器階段失敗,或者說所有4種模式(c-shared,shared,c-archive,archive)都不可用或者調用go tool link -shared
手動抱怨缺少窗口的具體說明。
我的理解是,我需要建立可用lib.a是編譯的一切,我會使用到的目標文件(*的.o),然後把它通過ar
才能產生有效的靜態庫。
現在的問題是我是否可以完全跳過Go的鏈接器,並基於準備好的.o
文件手動創建.a
?
如果甚至有可能,我該如何去做?
你在哪裏得到這些「準備好的'.o'文件」以構建成靜態庫?有關Windows問題的詳細信息,請參閱https://github.com/golang/go/issues/11058。 – JimB
@JimB當調用cgo時,.o文件來自Go本身。你可以用'-x'參數運行一個示例代碼,這樣它就會向你展示它正在做的所有事情,然後通過調用'go tool [tool] [arguments]''並調用' gcc [arguments]'因爲這是用CGo代碼去做的。 – AlexKey
@JimB另外,如果你看看你鏈接的問題仍然存在,意味着它沒有解決。但是,當我在自己的答案中編寫代碼時,我不得不構建Go代碼的最新主分支,以便能夠成功編譯所有內容。 – AlexKey