2015-04-29 19 views
5

ho scritto un programma di Nim,Nim croce compilazione di C

echo("Hello.") 

E poi ho cercato di attraversare compilare per una macchina Linux,

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

Ciò ha prodotto il seguente risultato:

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] 

A questo punto sono stato modificato nella directory nimcache/ e ho tentato di eseguire:

gcc hello.c -o hello.o 

Ma che mi ha dato un errore:

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

ho pensato, "non disperatevi, mi limiterò a trovare nimbase.h e rilasciarlo nella directory nimcache lì", ma dopo che ho avuto un nuovo errore,

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. 

Non sono sicuro di cosa dovrei fare con quello. Ho provato a utilizzare l'opzione --genScript, ma ciò ha provocato errori simili. Sto usando OS X Yosemite.

Grazie!

Aggiornamento:

non ero sicuro di come molti architetture sono stati sostenuti per l'opzione --cpu:, ma ho trovato una lista (parziale?) Il post What makes Nim practical blog. Ho finito per chiamare,

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

Questo ha impedito l'errore che ho visto durante la compilazione sulla mia macchina Linux. Se stai usando Linux o OS X non è sicuro che la vostra architettura della CPU è che si può chiamare,

less /proc/cpuinfo 
+1

I documenti dicono che "il codice C generato non è indipendente dalla piattaforma C il codice generato per Linux non viene compilato su Windows, ad esempio. " e "sposta il codice C e lo script di compilazione compile_myproject.sh sulla tua macchina Linux i386". Quindi forse non puoi completare questo su OS X. – Thilo

+1

Oh sì, mi ricordo di averlo letto. Ho scp'd 'nimcache' (con' nimbase.h') nella mia macchina linux e ho ottenuto di nuovo l'ultimo errore. Mi manca ancora qualcosa? – cjohnson318

risposta

5

L'ultimo problema è che si sta eseguendo gcc per arco x86_64, mentre le fonti sono stati generati per arch i386.

+2

Sì. Sta affermando staticamente di essere su una piattaforma a 32 bit. – StilesCrisis

+0

Grazie a tutti, ho ancora problemi a compilare, ma questo risponde alla domanda che ho avuto sull'errore che ho continuato a vedere. Usando 'nim c --cpu: amd64 --os: linux -c hello.nim' ha fatto il trucco. – cjohnson318

2

Avevo lo stesso problema ottenendo nim per compilare file eseguibili per Windows da una macchina GNU/Linux, quindi ho creato uno script bash. Prende il percorso della directory contenente i file di origine *.nim e il nome del file eseguibile da emettere.

Sono sicuro che si potrebbe scambiare il compilatore GCC (MinGW in questo caso) e cambiare l'interruttore --os: a seconda dei casi:.

#!/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