📑

arch|linuxのnimからwindows版をクロスコンパイル(環境を構築)

1 min read

archなのでyay

yay --answerdiff none --answerclean none --answeredit none mingw-w64-binutils-bin
yay --answerdiff none --answerclean none --answeredit none mingw-w64-crt-bin
yay --answerdiff none --answerclean none --answeredit none mingw-w64-gcc-bin
yay --answerdiff none --answerclean none --answeredit none mingw-w64-headers-bin
yay --answerdiff none --answerclean none --answeredit none mingw-w64-winpthreads-bin

*.nim.cfg

nimでのクロスコンパイル自体は n番煎じなので、概ねそのとおりに書けばよい。

Nimクロスコンパイルのやり方 - Qiita
Nimクロスコンパイルのやり方(Linux->Windows版) - Qiita

archlinuxでは/etc/nim.cfgに十分な記述があるので、差分だけ書けば良い。

GNU-linkerのオプションが、一部 mingw-linkerでは通らないので、本家オプションの中身を空欄で上書きして潰す必要がある。

amd64.windows.gcc.path = "/usr/bin/"
amd64.windows.gcc.exe = "x86_64-w64-mingw32-gcc"
amd64.windows.gcc.linkerexe = "x86_64-w64-mingw32-gcc"
#amd64.windows.gcc.options.linker = ""
gcc.options.linker = ""

nim c --os:windows *.nim

あとは --os:windows を入れれば、出力ファイル名も *.exe にしてくれる。
windowsでの動作は試してないが :P wineで動いたので多分問題ないだろう。

例えば とあるスクリプト をos:windowsビルドするとこうなる

$ nim c --os:windows modini.nim
Hint: used config file '/etc/nim/nim.cfg' [Conf]
Hint: used config file '/etc/nim/config.nims' [Conf]
Hint: used config file '.../modini.nim.cfg' [Conf]
...

Hint:  [Link]
Hint: 42996 LOC; 0.794 sec; 47.617MiB peakmem; Debug build; proj: .../modini.nim; out: .../modini.exe [SuccessX]
$ file modini.exe 
modini.exe: PE32+ executable (console) x86-64, for MS Windows
$ wine ./modini.exe 

Discussion

ログインするとコメントできます