Code Day's Night

ichikawayのブログ

Go言語のクロスコンパイルで生成したバイナリが動作しない

VAddyのコマンドラインツールをgolangを使って書いているのですが、MacからLinuxやWindowsのバイナリを生成して、例えばLinux環境で動作させようとすると、

   line 1: syntax error near unexpected token `newline'
   line 1: `!<arch>'

というエラーが出て動作しない状況に遭遇しました。

 

解決策は簡単で、main()が書いてあるファイルのpackage宣言がpackage mainではなくpackage vaddyという名前になっていたのが原因でした。これをクロスコンパイルすると外部ライブラリとしてコンパイルするだけで、実行可能ファイルにはなりません。

Mac上で開発していて、package vaddyの状態でも go run xxx.goとすると実行できてしまうので、クロスコンパイルするまでは気付かない問題でした。

 

ちなみに、クロスコンパイルするときは、例えばlinux 64bitの場合は下記のようにしています。
   GOOS=linux GOARCH=amd64 go build  -o bin/vaddy-linux-64bit

 このようなシェルスクリプトを作成して、複数環境のバイナリを生成しています。

 

参考文献

qiita.com

qiita.com

 

WEB+DB PRESS Vol.82

WEB+DB PRESS Vol.82

  • 作者: 山口徹,Jxck,佐々木大輔,横路隆,加来純一,山本伶,大平武志,米川健一,坂本登史文,若原祥正,和久田龍,平栗遵宜,伊藤直也,佐藤太一,高橋俊幸,海野弘成,五嶋壮晃,佐藤歩,吉村総一郎,橋本翔,舘野祐一,中島聡,渡邊恵太,はまちや2,竹原,河合宜文,WEB+DB PRESS編集部
  • 出版社/メーカー: 技術評論社
  • 発売日: 2014/08/23
  • メディア: 大型本
  • この商品を含むブログ (1件) を見る
 

 

 

スターティングGo言語

スターティングGo言語

 

 

 

みんなのGo言語[現場で使える実践テクニック]

みんなのGo言語[現場で使える実践テクニック]

  • 作者: 松木雅幸,mattn,藤原俊一郎,中島大一,牧大輔,鈴木健太
  • 出版社/メーカー: 技術評論社
  • 発売日: 2016/09/09
  • メディア: Kindle版
  • この商品を含むブログを見る