2016-12-18 26 views
6

Tôi cần phiên bản cũ hơn của GCC để cài đặt bộ công cụ CUDA, vì bộ công cụ CUDA không hỗ trợ GCC mới hơn 5.3.1 và máy Fedora mà tôi đang cố gắng cài đặt đi kèm với GCC 6. Tôi không có nhiều quyền kiểm soát máy, vì vậy tôi phải tự mình xây dựng GCC. Các bước tôi đã theo là:Không thể xây dựng GCC do C++ 11 lỗi

$ cd gcc-5.3.0 
$ contrib/download_prerequisites 
$ cd ../build 
$ ../gcc-5.3.0/configure --prefix=$HOME/local/gcc-5.3.0 --program-suffix=5.3 --enable-shared --enable-multiarch --enable-threads=posix --enable-languages=c,c++,fortran --enable-checking=release --with-tune=generic 
$ make 

Điều này dẫn đến thành công configure, nhưng make thất bại với lỗi:

cfns.gperf:101:1: error: ‘const char* libc_name_p(const char*, unsigned int)’ redeclared inline with ‘gnu_inline’ attribute 

Có một bó toàn bộ khác C++ 11 cảnh báo là tốt. Sau khi tìm kiếm một số google, tôi figured rằng điều này đã làm với xây dựng GCC 5 hoặc cũ hơn với GCC 6. Tôi nghĩ rằng nó có thể giúp đỡ nếu tôi có thể buộc các trình biên dịch để làm theo C++ 98 để thay thế. Vì vậy, tôi đã thử:

$ export CXXFLAGS="-std=gnu++98" 
$ ../gcc-5.3.0/configure ... 
$ make 

Không hoạt động. Tôi vẫn tiếp tục nhận được cùng một cảnh báo C++ 11, với việc xây dựng thất bại với cùng một lỗi chính xác. Sau đó, tôi đã thử:

$ ../gcc-5.3.0/configure CXXFLAGS="-std=gnu++98" ... 
$ make 

Một lần nữa, cùng một lỗi. Tôi nhìn vào Makefile lần này, và chắc chắn có CXXFLAGS được đặt thành -std=gnu++98 ở đây và ở đó. Ngoài ra, tôi đã cố gắng để xây dựng GCC 4.9.3 cũng như để xem nếu đây là một vấn đề gắn liền với một phiên bản cụ thể, nhưng tôi đã nhận được lỗi tương tự một lần nữa.

Tôi không chắc chắn cách tiếp tục. Bất kỳ sự giúp đỡ nào cũng được đánh giá cao. Cảm ơn.

+1

Theo tài liệu https://gcc.gnu.org/onlinedocs/gcc/Inline.html, 'gnu_inline' là phần mở rộng gcc cho mã C trước C99. Vì bạn có mã nguồn, bạn có thể định vị tệp gây ra lỗi và cố gắng thay đổi khai báo vi phạm thành 'inline' để nó tuân theo cú pháp C99/11 và C++, hoặc thành' __INLINE' hoặc '__inline__'. Tôi đoán là, mã C++ của bạn bao gồm một số tiêu đề được viết cho mã C99 trước. Thông tin thêm tại đây: https://gcc.gnu.org/ml/gcc-patches/2015-08/msg00375.html – user3528438

+0

Đề xuất thú vị. Tôi đã thử những thay đổi như đã đề cập trong liên kết tham chiếu, nó đã cho tôi nhiều hơn nữa so với lỗi trước đó, nhưng cuối cùng nó không thành công với lỗi '' gcc-5.3.0/gcc/cp/except.c: 1043: tham chiếu không xác định đối với 'libc_name_p (char const *, unsigned int) ' collect2: error: ld trả về 1 trạng thái thoát''. – rahul1210

+0

hãy thử các giải pháp này từng cái một? https://www.google.com/search?q=undefined+reference+to+%60libc_name_p&rlz=1CAASUE_enUS669US669&oq=undefined+reference+to+%60libc_name_p&aqs=chrome..69i57&sourceid=chrome&ie=UTF-8 – user3528438

Trả lời

7

Trong trường hợp người khác gặp sự cố này, có vẻ như nó đã được sửa bởi patch này. Nếu bạn thực hiện các thay đổi được đề xuất (quá chi tiết để đề cập ở đây, nhưng đủ đơn giản để thực hiện thủ công) với tệp nguồn GCC, thì configuremake hoạt động thành công mà không cần phải chuyển các tùy chọn -std. Tôi đã xây dựng thành công GCC 5.3.0 bằng cách sử dụng GCC 6.2.1 với những thay đổi này đối với các tệp nguồn.

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