質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.35%
Windows 10

Windows 10は、マイクロソフト社がリリースしたOSです。Modern UIを標準画面にした8.1から、10では再びデスクトップ主体に戻され、UIも変更されています。PCやスマホ、タブレットなど様々なデバイスに幅広く対応していることが特徴です。

GCC

GCCはGNU Compiler Collectionの略です。LinuxのC言語コンパイラのデファクトスタンダードであり、数多くの他言語やプラットフォームサポートもします。

Go

Go(golang)は、Googleで開発されたオープンソースのプログラミング言語です。

Q&A

解決済

2回答

3282閲覧

Windows上で、gcc(MinGW-w64)を使ってLinux用のバイナリをコンパイルしたい

belgh

総合スコア27

Windows 10

Windows 10は、マイクロソフト社がリリースしたOSです。Modern UIを標準画面にした8.1から、10では再びデスクトップ主体に戻され、UIも変更されています。PCやスマホ、タブレットなど様々なデバイスに幅広く対応していることが特徴です。

GCC

GCCはGNU Compiler Collectionの略です。LinuxのC言語コンパイラのデファクトスタンダードであり、数多くの他言語やプラットフォームサポートもします。

Go

Go(golang)は、Googleで開発されたオープンソースのプログラミング言語です。

0グッド

1クリップ

投稿2020/10/21 21:32

編集2020/10/21 21:40

Windows10上で、VSCodeを使ってgo言語で開発を行っています。

今回sqliteの為の「"github.com/mattn/go-sqlite3"」というモジュールを使うにあたり、
内部でgccを使っているらしく、ビルド時にエラーが出てしまいました。

$Env:GOOS = "linux"; $Env:GOARCH = "amd64"; $Env:CGO_ENABLED = 1; $Env:PATH = "$Env:PATH;C:\mingw-w64\mingw64\bin"; go build ↓ エラーになる ↓ # runtime/cgo gcc_linux_amd64.c: In function '_cgo_sys_thread_start': gcc_linux_amd64.c:61:2: error: unknown type name 'sigset_t'; did you mean '_sigset_t'?

ざっくりとはVSCodeのコンソール(PowerShell)から上記コマンドでビルドするようなイメージなのですが、
環境変数「CC」に指定するであろうコンパイル用バイナリに、Windows to Linux(ubuntu)を実現するものが見当たらず、
どのように設定したら良いかわからず、悩んでいます。

ぐぐると「Windows上でLinuxの仮想環境を構築したほうが早い」という回答ばかり出てくるのですが、
VSCodeのコンソールだけで完結させる方法は無いのでしょうか。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

maisumakun

2020/10/21 23:40

> Windows10上で、VSCodeを使ってgo言語で開発を行っています。 最終形もLinuxで動かす前提でしょうか?
belgh

2020/10/21 23:58

はい。echoというwebフレームワークを使っていて、 エラーが出る前のバイナリはubuntu上で動かしていました。 (今も動くバージョンは動いています) コーディングをWindows環境に統一したいという思いがあり、 試行錯誤している状況です。
gentaro

2020/10/22 00:08

タグにWSLが入ってるけどWSL環境は使わないという宗教的な縛りがあったりするんでしょうか? てかWSL使わないならタグ消すべきだと思いますが。
belgh

2020/10/22 00:16

すみません、サジェストで出てきて、なんとなく関係ありそうだったので入れてしまいました…。 ぐぐるとVSCodeからPowershellの代わりにWSLのコンソールを使うようにすれば行けそうですね。 調べてみます。ありがとうございます。 一応当初考えていた「MinGWで然るべきコンパイラを用意することでWindows上でLinux向けにコンパイルする」のができるかどうかも気になるので、恐れ入りますが、もう少しここも開いておきます。
gentaro

2020/10/22 00:31 編集

WSLは「Windows上でLinuxの仮想環境を構築」そのものなんで、それを嫌がってWindows環境だけで完結したいという鉄の意志があるのかと思いました。 簡単に使えるLinux環境があるのに、Linux用のバイナリを意地でもWindowsで作ろうとする意味がちょっとわかりませんが…。(逆はまだなんとなく需要がありそうだけど)
belgh

2020/10/22 00:26

すみません、言葉を選ばず素直に言うと「なんかめんどくさそうだったから」となります。。 VirtualBoxは使ってるんですが、そのイメージだといちいちインスタンス起動してVSCodeと何らかの設定で連携して…みたいな想像になってしまったので。 なるべく登場人物を増やしたくなかったというのもあります。 でもWSLだとVSCode内のコンソールだけで済むんだとしたら、シンプルっぽいですね。
gentaro

2020/10/22 00:33

まぁでも現状は結果的にクソ面倒くさそうな事態になってますよね。 たぶんWSL使うのが手っ取り早いと思います。
belgh

2020/10/22 00:36

ありがとうございます。調べてみて、上手く行ったら自己解決として書こうかと思います。
Daregada

2020/10/22 00:53 編集

WSLで適当なLinuxディストリビューションを入れ、Windows 10のVSCodeを使い、「Remote - WSL」(あるいは、それをまとめた「Remote Development」)拡張機能を組み込んで、ちょこっと設定して終わり。
guest

回答2

0

ベストアンサー

gcc(MinGW-w64)を使ってWindows以外のバイナリを出力することはできません。

gccツールチェインのソースを持ってきてクロスビルド用にgcc(MinGW-w64)を使ってビルドする必要がありますが、それはかなりハードルが高く時間も必要ですし、依存するライブラリもソースからビルドが必要になります。

いまからならWSL2かDocker(Windows Home Editionの場合はWSL2が必要)を使うのがお勧めです!

例:

shell

1docker run --rm -it \ 2--mount type=bind,source=$PWD,target=/work \ 3-w /work golang:alpine \ 4go build -o app

ただし、上記はCGOが絡んでいる場合、alpine-linuxでしか動かないバイナリになってしまいます。
動かしたいlinux-distributionに合わせたイメージでビルドするように調整してください。

投稿2020/10/22 01:05

編集2020/10/22 01:42
nobonobo

総合スコア3367

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

belgh

2020/10/22 11:41

大変遅くなりましたが、ありがとうございます! そのままバイナリを出力するのはかなり煩雑であることを理解しました。 ご提示いただいた手法でやってみます。
guest

0

以下の記事にございますように
https://yrhw0609.hatenablog.com/entry/2019/10/26/092030
TDM-GCC-64を導入してみては如何でしょうか。

こちらはタイトルを読み飛ばして書いてしまった誤回答記事です。失礼しました!

投稿2020/10/22 00:27

編集2020/10/22 02:58
yasutakatou

総合スコア446

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

belgh

2020/10/22 00:31

ありがとうございます。 そちらは、Windows上でWindows用のバイナリをコンパイルする記事かと思います。 (sqliteモジュールを使う場合、Windows用にもgccが必要になります)
yasutakatou

2020/10/22 02:57

大変申し訳ない。タイトルを読み飛ばしていましたね。失礼しました!!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.35%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問