2013-05-08 31 views
7

Câu hỏi đơn giản hy vọng. Tôi đang cố gắng để tìm hiểu cơ bản Objective-C biên dịch từ dòng lệnh, với clang. Tôi hiểu rằng Xcode là một giải pháp tốt hơn cho các dự án phức tạp và tôi dự định chuyển sang sớm, nhưng cá nhân tôi cảm thấy tôi hiểu ngôn ngữ tốt hơn nếu tôi có thể biên dịch thủ công trong thiết bị đầu cuối và các dự án lập trình giới thiệu nhỏ. một rắc rối để biên dịch trong một thiết bị đầu cuối hơn là phải bắt đầu một dự án mới.Biên dịch nhiều tệp mục tiêu-C trên dòng lệnh với clang

Vì vậy, câu hỏi đặt ra là: làm cách nào để tôi biên dịch một chương trình Mục tiêu-C bao gồm nhiều tệp (từ dòng lệnh)? (Tôi đang cố gắng thực hiện chương trình phân số từ chương 7 của sách giáo khoa của Kochan, với tệp main.m và Fraction.m mà cả tệp #import "Fraction.h" và tệp Fraction.h nhập khẩu khung Nền tảng.) để biên soạn một tập tin duy nhất tôi sử dụng một cái gì đó giống như

clang -fobjc-arc main.m -o prog1 

Nhưng nếu tôi gõ đó và tôi muốn bao gồm các file khác hơn main.m trong dự án, tôi nhận lỗi bao gồm:

ld: symbol(s) not found for architecture x86_64 
clang: error: linker command failed with exit code 1 (use -v to see invocation) 

Nếu tôi hãy thử thêm các tệp bổ sung vào lệnh dưới dạng đối số, như

clang -fobjc-arc main.m Fraction.h Fraction.m -o prog1 

sau đó tôi nhận được

clang: error: cannot specify -o when generating multiple output files 

Và nếu tôi sau đó loại bỏ lập luận -o như

clang -fobjc-arc main.m Fraction.h Fraction.m 

sau đó tôi nhận được một đống khổng lồ lỗi tất cả đề cập đến khuôn khổ nền tảng, cuối cùng kết thúc bằng "gây tử vong lỗi: quá nhiều lỗi phát ra, dừng ngay bây giờ ".

Làm cách nào để làm điều này và làm cho nó hoạt động? Hoặc tôi cần phải chỉ cần hút nó lên và sử dụng Xcode ngay sau khi nhiều hơn một tập tin có liên quan?

+3

Một lỗi là bạn chỉ định tệp bao gồm "Fraction.h" làm đối số cho trình biên dịch. –

+1

Ah! Cảm ơn. Đó là nó: nó cần thiết để chỉ là các tập tin .m và không phải là .h. –

Trả lời

6

Chỉ các tập tin thực thi (* .m) được biên dịch, không phải là giao diện/include file, vì vậy đây sẽ làm việc:

clang -fobjc-arc main.m Fraction.m -o prog1 

Các thông báo lỗi kỳ lạ "tạo nhiều file đầu ra" có lẽ do thực tế rằng clang cũng có thể biên dịch các tệp tiêu đề thành "tệp đầu trang được biên dịch trước".

+0

-fobjc-arc không được hỗ trợ trên nền tảng sử dụng thời gian chạy cũ –

+0

@AbdennourTOUMI: Điều đó là chính xác. Nhưng câu hỏi * này rõ ràng là về cách biên dịch mã Objective-C * với ARC * trên dòng lệnh. Nếu không, chỉ cần bỏ qua tùy chọn đó. –

+0

không, không, ý tôi là đây là lỗi được hiển thị khi tôi đang cố gắng biên dịch các tệp đó https://github.com/macmade/host-manager/tree/master/source trong Ubuntu ... Tôi sẽ hãy biết ơn nếu bạn giải thích cho tôi cách biên dịch các tệp đó trong LINUX –

2

Không chỉ định Fraction.h làm tệp nguồn. Nó không phải, nó là một tập tin tiêu đề.

Bạn cũng gần như chắc chắn muốn ném vào -framework Foundation. Nếu bạn sử dụng bất kỳ khung công tác nào khác, có thể bạn sẽ cần xác định những khung này.

Các vấn đề liên quan