2012-02-15 92 views
5

Tôi đã cố gắng xây dựng một chương trình đơn giản trong thiết bị đầu cuối.Không thể biên dịch chương trình C++ đơn giản trong Ubuntu

#include <stdio.h> 
#include <stdlib.h> 
int main() 
{ 
     printf("TESTING"); 
     return 1; 
} 

Tôi chạy g ++ -o test test.cpp

Các lỗi:

/usr/include/features.h:323:26: error: bits/predefs.h: No such file or directory 
/usr/include/features.h:356:25: error: sys/cdefs.h: No such file or directory 
/usr/include/features.h:388:23: error: gnu/stubs.h: No such file or directory 
In file included from test.cpp:2: 
/usr/include/stdlib.h:42:29: error: bits/waitflags.h: No such file or directory 
/usr/include/stdlib.h:43:30: error: bits/waitstatus.h: No such file or directory 
/usr/include/stdlib.h:320:49: error: sys/types.h: No such file or directory 
In file included from test.cpp:2: 
/usr/include/stdlib.h:35: error: ‘__BEGIN_DECLS’ does not name a type 
/usr/include/stdlib.h:102: error: expected constructor, destructor, or type conversion before ‘;’ token 
/usr/include/stdlib.h:113: error: ‘__END_NAMESPACE_STD’ does not name a type 
/usr/include/stdlib.h:122: error: expected constructor, destructor, or type conversion before ‘;’ token 
/usr/include/stdlib.h:140: error: expected constructor, destructor, or type conversion before ‘extern’ 
/usr/include/stdlib.h:145: error: expected constructor, destructor, or type conversion before ‘extern’ 
/usr/include/stdlib.h:149: error: expected initializer before ‘__THROW’ 
/usr/include/stdlib.h:152: error: expected initializer before ‘__THROW’ 
/usr/include/stdlib.h:153: error: ‘__END_NAMESPACE_STD’ does not name a type 
/usr/include/stdlib.h:160: error: ‘__END_NAMESPACE_C99’ does not name a type 
/usr/include/stdlib.h:168: error: ‘__END_NAMESPACE_STD’ does not name a type 

Danh sách này vẫn tiếp tục theo cách này. Tôi hy vọng ai đó có thể chỉ ra những gì tôi đã không làm để thực hiện công việc này.

+0

Thử nghiệm 'g ++ --verbose -o test.cpp' cung cấp cho bạn những gì? – genpfault

+1

xem liệu http://ubuntuforums.org/showthread.php?t=1877944 có giúp –

+0

Tôi có thể khắc phục được sự cố không. Tôi đã kiểm tra đầu ra tiết và quyết định đơn giản hóa đường dẫn. Tôi đã đổi thành chỉ /usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin Chương trình biên dịch ngay bây giờ, nhưng nó không xuất ra bất cứ thứ gì khi chạy . Điều đó có bình thường không? –

Trả lời

2

GIẢI PHÁP: Đường dẫn của tôi bị trống do một số nỗ lực trước đó khi hoạt động. Tôi đã tạo đường dẫn rõ ràng bằng cách sử dụng:

export PATH= /usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin 

Vấn đề của tôi sau khi biên dịch là chương trình sẽ không hiển thị bất kỳ kết quả nào. Điều này là do thực tế là một người dùng Linux mới, tôi không nhận ra rằng tôi cần phải gọi một chương trình với ./ ở phía trước. Điều này cũng có thể được đặt trong đường dẫn bằng cách gọi:

export PATH: $PATH:./ 
+1

[Có '.' trong PATH của bạn có thể khá nguy hiểm.] (Https: //unix.stackexchange.com/questions/65700/is-it-safe-to-add-to-my-path-how-come) –

4

Mã của bạn hoạt động cho tôi với cùng một nền tảng.

Thông báo lỗi giống như lỗi C. Có lẽ bằng cách sử dụng các tiêu đề C++ sẽ giúp đỡ.

#include <cstdio> 
#include <cstdlib> 

int main(int argc, char *argv[]) { 
    printf("TESTING"); 
    return 0; 
} 

Bạn cũng có thể có một số bí danh lạ. Đôi khi, mọi người thiết lập gcc làm bí danh cho g ++ không chính xác.

[email protected]:~$ set | grep g++ 

[email protected]:~$ alias grep 
alias grep='grep --color=auto' 

[email protected]:~$ alias g++ 
bash: alias: g++: not found 

[email protected]:~$ which g++ 
/usr/bin/g++ 

[email protected]:~$ ll `which g++` 
lrwxrwxrwx 1 root root 7 2011-08-14 02:17 /usr/bin/g++ -> g++-4.6* 

[email protected]:~$ g++ --version 
g++ (Ubuntu/Linaro 4.6.1-9ubuntu3) 4.6.1 
Copyright (C) 2011 Free Software Foundation, Inc. 
This is free software; see the source for copying conditions. There is NO 
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. 

Đây là cách tôi thiết lập môi trường dev của tôi trong ubuntu:

sudo apt-get install build-essential 

này thiết lập tất cả các tiêu chuẩn C++ thư viện mà không cần phải biết các chi tiết knitty gritty.

+0

Cảm ơn bạn, tôi đã tìm ra nó mặc dù –

3

Tôi gặp sự cố rất giống với vấn đề này. Trong trường hợp của tôi, vấn đề là tôi đã có một số tệp tiêu đề bị hỏng bằng chứng là cố gắng xem chúng:

/usr/include/x86_64-linux-gnu/sys$ cat * | grep "Input/outpu error" 
cat: ioctl.h: Input/output error 
cat: types.h: Input/output error 

Giải pháp cho tôi là loại bỏ các tệp này và sau đó cài đặt lại chúng.

sudo apt-get purge libc6-dev 
sudo apt-get install libc6-dev 
+1

Bạn cũng có thể cài đặt lại các gói bằng cách sử dụng 'aptitude reinstall'. – tmandry

+1

Nếu ai đó không cài đặt 'aptitude':' sudo apt-get install --reinstall libc6-dev' cũng hoạt động. – ElmoVanKielmo

+0

apt-get purge đã xóa tất cả những gì tôi đã cài đặt trước đây. Đi qua những rắc rối của việc phải cài đặt lại tất cả. – user3124361

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