1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

Go言語でimport "C"をするとビルドできなくなる

Posted at

はじめに

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
1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?