2013-02-17 30 views
5

Vì vậy, tôi có một nguồn mainClass.c nơi tôi có chính xác định. Tôi có một tập tin tiêu đề class1.h và thực hiện tất cả các chức năng được định nghĩa trong class1.h trong class1.c. Tôi có hai biến (toàn cầu) trong class1.h tên cond và mutex đang được sử dụng trong class1.c cho bây giờ và có lẽ trong tương lai tôi sẽ sử dụng nó trong mainClass.c của tôi. Bây giờ để biên dịch tất cả các file nguồn để tạo ra một tập tin đối tượng tôi đang làm một cái gì đó như sau:Làm thế nào để biên dịch nhiều tệp .c và .h trong linux gcc?

gcc -Wall -pthread -I/home/2008/ariarad/mainClass1 mainClass1.c class1.c -o out

/home/2008/ariarad/mainClass1 là nơi mà tất cả tiêu đề và nguồn tác phẩm của tôi đang ở và tôi sử dụng pthead.h trong một tệp .c. Mặc dù tôi đã bao gồm nó ở đó, nó phàn nàn nên tôi phải đưa nó vào.

Bây giờ khi tôi chạy lệnh trên tôi nhận được các lỗi sau đây:

class1.c:3:16: error: redefinition of ‘cond’ 
class1.h:66:16: note: previous definition of ‘cond’ was here 
class1.c:4:17: error: redefinition of ‘mutex’ 
class1.h:67:17: note: previous definition of ‘mutex’ was here 

Chỉ trong trường hợp tôi có một khối ifndef và endif xung quanh class1.h để tránh nhiều nhận. Tôi chắc chắn không định nghĩa lại các biến được xác định trong tệp tiêu đề trong tệp .c. Vì vậy, ai đó có thể xin vui lòng giúp tôi tại sao nó vẫn còn cho tôi những sai sót?

+0

Chỉ để đảm bảo? Bạn có #ifndef CLASS1_H_/#define CLASS1_H_/#endif với mã của bạn giữa? Bạn cần xác định không chỉ #ifndef – DanChianucci

+0

viết một makefile? –

+0

@ Trump211 yup! – as3rdaccount

Trả lời

7

Bạn không thể xác định biến toàn cục trong tệp tiêu đề. Bạn phải xác định chúng thuộc một trong các file .c, và sau đó sử dụng extern trong các tập tin tiêu đề:

Trong một trong những file .c:

int cond; 

Trong một trong những file .h, mà phải được bao gồm bởi tất cả các tệp .c cần biến:

extern int cond; 
Các vấn đề liên quan