go程式生成windows平台下dll和lib方法

2021-10-01 14:56:09 字數 2209 閱讀 4348

​    go程式在一些方面編寫優於c/c++,我們可以自己用go寫一些小組件用c/c++呼叫。所以我們需要將go程式源**編譯成linux平台下.a檔案或者window平台下的dll和lib檔案。

- vs2015:在windows平台下從.dll檔案匯出.lib的環境(windows下也可以直接使用dll來執行程式,我習慣加上lib的方式)

我們編寫乙個名為godll.go的程式go

package main

import "c"

import (

"fmt"

)//export intadd

func intadd(a int32,b int32) int32

//export goprint

func goprint(str string)

func main()

這個程式需要注意幾點:

- 程式注釋不能有中文

- package main和func main()必須有,匯出的包必須是含有main的

- 匯出的函式前面用//export +函式名宣告,表示需要匯出該函式

- 引用包import "c"

**linux下**

​    我們使用go build命令編譯此程式,命令格式為

go build -buildmode=c-archive goflie.go    //替換gofile.go為編譯的檔名
執行之後我們會得到.a檔案和.**件,到此linux下我們就算完成了。接下來步驟都是針對windows下的

**windows下**

我們使用go build命令編譯此程式,命令格式為

go build -buildmode=c-shared -o gofile.dll gofile.go    //替換gofile為編譯的檔名
編譯後得到 .dll 和 .h 兩個檔案。其實windows下此時我們也算完成了,但是我習慣使用有靜態庫的方式,所以接下來主要利用dll生成lib

​    從dll檔案生成lib檔案的過程我們需要乙個def檔案,def檔案中描述的是匯出的函式列表。因為我們知道dll檔案中匯出函式列表所以我們可以直接新建乙個def檔案手寫。

​    新建乙個def檔案,用編輯器開啟此檔案,新增需要匯出的函式列表

library

exports

intadd

goprint

注意函式名的書寫一定要和匯出函式一樣

​    有了def檔案我們就可以生成lib檔案了,此時我們需要使用vs2015提供的lib.exe檔案(路徑:c:\program files (x86)\microsoft visual studio 14.0\vc\bin)。

​    首先將lib.exe所在目錄新增到環境變數的path目錄下,然後在cmd下執行以下命令

生成目標64位的命令格式:

lib /def:deffile.def /machine:x64 /out:libfile.lib
生成目標32位的命令格式:

lib /def:deffile.def /machine:x86 /out:libfile.lib
此時lib檔案生成就完成了

根據生成的h,dll,lib檔案我們使用c/c++測試,新建main.cpp在下面新增**

#include #include "godll.h"

#include #pragma comment(lib,"godll.lib")

gostring stringtogostring(std::string str)

int main()

編譯發現會出錯,此時我們需要注釋標頭檔案下的三行**

//typedef __size_type__ gouintptr;

//typedef float _complex gocomplex64;

//typedef double _complex gocomplex128;

編譯通過,大功告成!!!

參考:

把Go程式發布成windows服務

近日正在考慮用go程式做乙個報表計算服務,在g 上看到有老外介紹把go打包的exe發布成window service,遂把該文章翻譯過來,一同分享。大致方法 b 1.b 第一步當然是先將你的go程式打包成exe,比如go web server。b 2.b 使用nssm發布windows服務,命令 n...

windows下用go語言寫程式

linux下,google的go語言安裝起來很方便,用起來也很爽,幾行 就可以實現很強大的功能。現在的問題是我想在windows下玩 其實windows下也不麻煩,具體見下文。二 寫go 檔案 test.go 如下 package main import fmt func main test 四 批...

Windows 程式移植到Linux平台的一波N折

本人前端時間寫了個html檔案分析器,windows平台上的vc6.0,使用標準c 昨天接到指令,應要求要發布乙個linux版本的,茫然啦,linux下面的hello world都沒有玩過,對linux下的c 程式僅僅限於聽他們神吹過的gcc,g makefile什麼的,其他一概不知。這就注定移植過...