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