8

私は Nim プログラムを書きました。

echo("Hello.")

そして、Linuxマシン用にクロスコンパイルしようとしました.

nim c --cpu:i386 --os:linux -c hello.nim

これにより、次の出力が生成されました。

config/nim.cfg(45, 2) Hint: added path: '/Users/connor/.babel/pkgs/' [Path]
config/nim.cfg(46, 2) Hint: added path: '/Users/connor/.nimble/pkgs/' [Path]
Hint: used config file '/usr/local/lib/nim-0.10.2/config/nim.cfg' [Conf]
Hint: system [Processing]
Hint: hello [Processing]
Hint: operation successful (8753 lines compiled; 0.140 sec total; 14.148MB)[SuccessX]

この時点で、nimcache/ディレクトリに変更して実行しようとしました:

gcc hello.c -o hello.o

しかし、それは私にエラーを与えました:

hello.c:5:10: fatal error: 'nimbase.h' file not found
#include "nimbase.h"
         ^
1 error generated.

「大したことない、そこnimbase.hのディレクトリに見つけてドロップするだけだ」と思ったのnimcacheですが、その後、新しいエラーが発生しました。

In file included from hello.c:5:
./nimbase.h:385:28: error: 'assert_numbits' declared as an array with a
      negative size
  ...sizeof(NI) == sizeof(void*) && NIM_INTBITS == sizeof(NI)*8 ? 1 : -1];
     ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
1 error generated.

私はそれで何をすべきかわかりません。オプションを使用しようとし--genScriptましたが、同様のエラーが発生しました。OS X Yosemite を実行しています。

ありがとう!

アップデート:

このオプションでサポートされているアーキテクチャの数はわかりませんでしたが、Nim を実用的なものにするブログ投稿--cpu:に (部分的な?) リストを見つけました。結局電話したのですが、

nim c --cpu:amd64 --os:linux -c hello.nim

これにより、Linux ボックスでコンパイルしたときに表示されたエラーが防止されました。Linux または OS X を使用していて、CPU アーキテクチャが不明な場合は、

less /proc/cpuinfo
4

2 に答える 2

9

最後の問題は、ソースが i386 arch 用に生成されているのに、x86_64 arch 用に gcc を実行しているためです。

于 2015-04-29T07:36:18.393 に答える
4

nimGNU/Linux マシンから Windows 用の実行可能ファイルをコンパイルする際に同じ問題が発生していたので、bashスクリプトを作成しました。ソースファイルを含むディレクトリへのパスと、*.nim出力する実行可能ファイルの名前を取ります。

GCC コンパイラ (この場合は MinGW) を交換して--os:、必要に応じてスイッチを変更できると確信しています。

#!/usr/bin/env bash
# Nim must generate C sources only, to be fed to MingW
nim c --cpu:amd64 --os:windows --opt:speed --embedsrc --threads:on --checks:on -c -d:release $1/*.nim
# Copy nimbase.h so MingW32 can find it during compilation and linking
cp /opt/Nim/lib/nimbase.h $1/nimcache/nimbase.h
mkdir -p $1/bin
cd $1/nimcache && x86_64-w64-mingw32-gcc -save-temps $1/nimcache/*.c -o $1/bin/$2.exe
rm $1/nimcache/*.{i,s} # only care about *.o objects
ls -lAhF $1/nimcache
ls -lAhF $1/bin
于 2016-06-14T16:05:38.417 に答える