2009-05-16 10 views
9

Khi tôi cố gắng đểGCC xây dựng vấn đề (#include_next limits.h)

$ make depend -f gcc.mak

một middleware trên máy tính Ubuntu của tôi, tôi có được điều này

/usr/include/../include/limits.h:125:26: error: no include path in which to search for limits.h

Đây là các nội dung xung quanh limits.h: 125 :

 
/* Get the compiler's limits.h, which defines almost all the ISO constants. 

    We put this #include_next outside the double inclusion check because 
    it should be possible to include this file more than once and still get 
    the definitions from gcc's header. */ 
#if defined __GNUC__ && !defined _GCC_LIMITS_H_ 
/* `_GCC_LIMITS_H_' is what GCC's file defines. */ 
# include_next <limits.h> 
#endif 

tôi đã cố gắng thiết lập

 
$ export INCLUDE=/usr/lib/gcc/x86_64-linux-gnu/4.3/include-fixed/ 
$ export C_INCLUDE_PATH=/usr/lib/gcc/x86_64-linux-gnu/4.3/include-fixed/ 
$ export CPLUS_INCLUDE_PATH=/usr/lib/gcc/x86_64-linux-gnu/4.3/include-fixed/ 

(đây là nơi tôi tìm thấy một giới hạn khác.h trên hệ thống của mình). Tôi đã cài đặt libc6-dev, có thể giới hạn của nó đã bị một gói khác ghi đè không? Tôi có cần gói -dev khác không? Hoặc là một biến môi trường cần thiết; có lẽ điều này có thể bị phá vỡ theo cách khác?

+0

Điều này sẽ hoạt động như hiện tại. Bạn thấy gì khi bạn thêm '-v' vào lệnh biên dịch? –

+0

Tôi đoán rằng giới hạn.h bị thiếu (hoặc ghi đè). -v được tôi GNU Hãy thực hiện 3.81 Mục tiêu: x86_64-linux-gnu phiên bản gcc 4.3.3 (Ubuntu 4.3.3-5ubuntu4) –

+0

Một limits.h khác mà bạn có thể tìm thấy là cái cần được kéo vào bởi include_next . Bạn có thể thêm v vào dòng lệnh gcc thực hiện quá trình biên dịch không thành công, tức là gcc -v -c foo.c không? Phần thú vị trong sản lượng của nó sẽ là #include <...> tìm kiếm bắt đầu ở đây: /usr/local/include /usr/lib/gcc/x86_64-linux-gnu/4.3.3/include /usr/lib/gcc/x86_64-linux-gnu/4.3.3/bao gồm cố định /usr/include Kết thúc danh sách tìm kiếm. –

Trả lời

1

gói bạn cần là glibc.

+0

Điều đó nghe có vẻ đúng. Tôi sẽ đánh dấu nó là giải pháp, ngay cả khi tôi chưa xác minh nó. –

+0

Tôi có glibc và vẫn gặp phải lỗi này. – Reinderien

+1

Tôi đang cố gắng biên dịch cho android (vì vậy không có glibc như vậy) và tôi nhận được lỗi này quá. Không thể tìm ra tiêu đề tôi nên đưa vào. – Wyatt8740

0

Cân nhắc sử dụng #include_next <limits.h> (phần mở rộng gcc) để buộc gcc xem số tiếp theo được tìm thấy limits.h trong đường dẫn bao gồm (phải là bản sao của công cụ).

+0

Tôi không có bất kỳ giới hạn nào khác (hợp lý). Tôi cần giới hạn GCC.h. Một trong bao gồm cố định dường như ... tắt. –

0

Tôi không nhớ chính xác độ phân giải nữa, nhưng nó phải thực hiện với một số gói bị thiếu. Sau khi apt-nhận được một số công cụ hơn, nó làm việc cho tôi.

2

Tôi đã gặp sự cố của mình khi biên dịch với STLport 5.1.5, nhưng có vẻ như vấn đề đã được khắc phục là STLport 5.2.0. Vấn đề được ghi lại trong STLport Release Notes. Sau khi nhận được một bản sao của STLport 5.2.1, quá trình biên dịch thành công mà không bị trục trặc.

2

Tôi đã gặp sự cố này khi thực hiện biên dịch chéo. Khi bạn thực hiện một 'làm phụ thuộc' các Makefile sẽ gọi chương trình makedepend khi nhìn từ nhiệm vụ này:

MAKEDEPPROG=makedepend 

makedepend chỉ tìm kiếm một số mặc định bao gồm các thư mục bắt đầu với /usr/include

Kể từ khi thị #include_next nghĩa để bao gồm các trường hợp tìm thấy tiếp theo của tệp được bao gồm có tên trong đường dẫn tìm kiếm, điều này sẽ thất bại nếu không tìm thấy một tệp khác.

Đối với tôi, giải pháp là trực tiếp makedepend để tìm kiếm trình biên dịch chéo của tôi bao gồm các thư mục đầu tiên. Tôi đã làm điều này bằng cách thay đổi sự phân công MAKEDEPPROG để bao gồm các -I chỉ:

MAKEDEPPROG=makedepend -I < path/to/cross-compiler/include-fixed > 

tôi khuyên bạn nên đọc về chương trình makedepend (khoảng mà tôi không biết gì trước đó). Ví dụ, nó không rõ ràng với tôi rằng makedepend sẽ không sử dụng một con đường tìm kiếm môi trường. Chỉ thị -I đặt đường dẫn tìm kiếm được chỉ định trước đường dẫn mặc định của makedepend.