2015-04-29 19 views
5

Tôi đã viết một chương trình Nim,Nim chéo biên soạn C

echo("Hello.") 

Và sau đó tôi đã cố gắng để vượt qua biên dịch cho một máy Linux,

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

này được sản xuất đầu ra sau đây:

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] 

Tại thời điểm này tôi đã thay đổi thành thư mục nimcache/ và cố gắng thực hiện:

gcc hello.c -o hello.o 

Nhưng điều đó đã cho tôi một lỗi:

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

Tôi nghĩ, "không có vấn đề gì, tôi sẽ chỉ tìm nimbase.h và thả nó trong nimcache thư mục đó," nhưng sau đó tôi nhận được một lỗi mới,

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. 

Tôi không chắc mình phải làm gì với điều đó. Tôi đã cố gắng sử dụng tùy chọn --genScript, nhưng điều đó dẫn đến lỗi tương tự. Tôi đang chạy OS X Yosemite.

Cảm ơn!

Cập nhật:

Tôi đã không chắc chắn có bao nhiêu kiến ​​trúc được hỗ trợ cho các tùy chọn --cpu:, nhưng tôi tìm thấy một danh sách (phần?) Trên bài What makes Nim practical blog. Tôi đã kết thúc cuộc gọi,

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

Điều này đã ngăn lỗi tôi thấy khi biên dịch trên hộp Linux của mình. Nếu bạn đang sử dụng Linux hoặc OS X không chắc chắn những gì kiến ​​trúc CPU của bạn là bạn có thể gọi điện thoại,

less /proc/cpuinfo 
+1

Các tài liệu nói rằng "mã C được tạo ra không phải là nền tảng độc lập C Ví dụ: mã được tạo cho Linux không biên dịch trên Windows. " và "di chuyển mã C và biên dịch compile_myproject.sh sang máy tính Linux i386 của bạn". Vì vậy, có lẽ bạn không thể hoàn thành điều này trên OS X. – Thilo

+1

Ồ vâng, tôi nhớ đọc điều đó. Tôi scp'd 'nimcache' (với' nimbase.h') vào hộp linux của tôi và nhận lại lỗi cuối cùng. Tôi vẫn còn thiếu một cái gì đó? – cjohnson318

Trả lời

5

Vấn đề cuối cùng là bởi vì bạn đang chạy gcc cho x86_64 vòm, trong khi các nguồn đã được tạo ra cho kiến ​​trúc i386.

+2

Có. Nó khẳng định rằng bạn đang ở trên nền tảng 32 bit. – StilesCrisis

+0

Cảm ơn tất cả các bạn, tôi vẫn đang gặp khó khăn trong việc biên dịch, nhưng điều này trả lời câu hỏi tôi gặp phải về lỗi mà tôi đã thấy. Sử dụng 'nim c --cpu: amd64 --os: linux -c hello.nim' đã thực hiện thủ thuật. – cjohnson318

2

Tôi gặp sự cố tương tự khi nhận được nim để biên dịch các tệp thực thi cho Windows, từ máy GNU/Linux, vì vậy tôi đã thực hiện một tập lệnh bash. Nó có đường dẫn đến thư mục chứa các tệp nguồn *.nim và tên của tệp thi hành để xuất ra.

tôi chắc chắn rằng bạn có thể trao đổi trên các trình biên dịch GCC (MinGW trong trường hợp này) và thay đổi công tắc --os: như thích hợp:.

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