Nim кросс компиляция в C

я написал программу 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 и бросьте его в там", но после этого я получил новый ошибка,

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.

спасибо!

обновление:

Я не был уверен, сколько архитектур было поддержано для --cpu: вариант, но я нашел (частичный?) список на что делает Nim практичным блоге. Я закончил зову,

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

это предотвратило ошибку, которую я видел при компиляции на моем Linux box. Если вы используете Linux или OS X не уверены, что ваша архитектура процессора вы можете вызвать,

less /proc/cpuinfo

2 ответов


последняя проблема заключается в том, что вы используете gcc для x86_64 arch, в то время как источники были созданы для i386 arch.


у меня была такая же проблема с получением nim для компиляции исполняемых файлов для Windows с машины GNU / Linux, поэтому я сделал 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 /*.nim
# Copy nimbase.h so MingW32 can find it during compilation and linking
cp /opt/Nim/lib/nimbase.h /nimcache/nimbase.h
mkdir -p /bin
cd /nimcache && x86_64-w64-mingw32-gcc -save-temps /nimcache/*.c -o /bin/.exe
rm /nimcache/*.{i,s} # only care about *.o objects
ls -lAhF /nimcache
ls -lAhF /bin