📘

[Go: エラー]ld: warning: '/private/var/folders/44... の対処法

2023/09/27に公開

Goでsqliteを使おうとした時にエラーが出た時の対処法を書いておきます。

エラー

このエラーメッセージは、Goのコンパイルまたはリンクプロセス中に何かが失敗したことを示しています。
具体的には、ld(リンカ)がいくつかの未定義のシンボルまたは不正なバイナリ形式を検出しています。この問題は、コンパイラやリンカ、または使用されているライブラリまたは依存関係のいずれかにバグがある場合に発生する可能性があります。

$ go run main.go

# command-line-arguments
ld: warning: '/private/var/folders/44/9yrq6qdx6fg5vsx05773wm5h0000gn/T/go-link-225577677/go.o' has malformed LC_DYSYMTAB, expected 67 undefined symbols to start at index 7329, found 152 undefined symbols starting at index 32

結論

goのバージョンをgo1.18.1 -> go1.21.1に変更することで解消しました。

エラーが発生したコード

main.go
package main

import (
	"fmt"

	"github.com/mattn/go-sqlite3"
	"gorm.io/driver/sqlite"
	"gorm.io/gorm"
)

// User represents the schema for the "users" table
type User struct {
	ID   int    `gorm:"primaryKey"`
	Name string `gorm:"uniqueIndex"`
}

func main() {
	// Connect to the SQLite database
	db, err := gorm.Open(sqlite.Open("database.db"), &gorm.Config{
		DisableForeignKeyConstraintWhenMigrating: true,
	})
	if err != nil {
		panic(err)
	}

	// Migrate the schema (create tables)
	err = db.AutoMigrate(&User{})
	if err != nil {
		panic(err)
	}

	fmt.Println("Tables are created successfully!")
}

Discussion