はじめに
GoでDLL ファイルを作ろうとした時にハマった点についてのメモです.
環境は以下のとおりです.
- Windows 11 Pro 23H2
- Go1.21.3
準備
go mod init hoge
で module を作ります.
go.mod
module hoge
go 1.21.3
main.go
は最低限で定義します.
main.go
package main
func main() {
}
ディレクトリ構造は次のようになります.
hoge
│ go.mod
│ main.go
ここで,hoge
ディレクトリ内で以下のコマンドを実行すればビルドできます.windows 環境ではhoge.exe
が生成されます.
go build
症状
Go で DLL を作る時,"C"
を import します.
main.go
package main
import "C"
func main() {
}
DLL をビルドするためには以下のようにします.-o hoge.dll
を抜くと,成功時にhoge.dll
ではなくhoge
が生成されたため,出力は指定します.
go build -buildmode=c-shared -o hoge.dll
このコマンドを実行すると次のようなエラーが出ました.
package hoge: build constraints exclude all Go files in C:\Users\Tsuyopon\gitFiles\dlltest
試しにmain.go
を指定して実行すると,no Go source files
というエラーが出ました.
go build -buildmode=c-shared main.go
go: no Go source files
原因
原因はCGO_ENABLED
が 0 であることでした.
go env CGO_ENABLED
0
解決策
以下のコマンドを実行します.
go env -w CGO_ENABLED=1
再度確認すると設定が更新されていることがわかります.
go env CGO_ENABLED
1
結果
再度以下のコマンドを実行するとhoge.dll
が生成されました.
go build -buildmode=c-shared -o hoge.dll