2011-12-11 3 views
0

B. Stroustrup의 프로그래밍 텍스트와 pg 50에 대한 'hello world'프로그램을 사용하면 오류가 발생합니다. "std_lib_facilities.h"포함 파일에 문제가 있습니다.극단적 인 초보자 - 안녕하세요 세계 오류

In file included from /usr/include/c++/4.4/ext/hash_map:60, 
      from std_lib_facilities.h:34, 
      from hworld1.cpp:1: 
/usr/include/c++/4.4/backward/backward_warning.h:28: warning: #warning This file  includes at least one deprecated or antiquated header which may be removed without further notice at a future date. Please use a non-deprecated interface with equivalent functionality instead. For a listing of replacement headers and interfaces, consult the file backward_warning.h. To disable this warning use -Wno-deprecated. 
/tmp/ccpwXUYx.o: In function `main': 
hworld1.cpp:(.text+0x14): undefined reference to `std::cout' 
hworld1.cpp:(.text+0x19): undefined reference to `std::basic_ostream<char,  std::char_traits<char> >& std::operator<< <std::char_traits<char> >(std::basic_ostream<char, std::char_traits<char> >&, char const*)' 
/tmp/ccpwXUYx.o: In function `__static_initialization_and_destruction_0(int, int)': 
hworld1.cpp:(.text+0x41): undefined reference to `std::ios_base::Init::Init()' 
hworld1.cpp:(.text+0x46): undefined reference to `std::ios_base::Init::~Init()' 
/tmp/ccpwXUYx.o:(.eh_frame+0x12): undefined reference to `__gxx_personality_v0' 
collect2: ld returned 1 exit status 

어떤 제안을하는 방법 파일을 수정하는 방법은, 아마도 해시 부분을 주석 -

출력은 'GCC hworld1.cpp'(루트로) 실행 한 후?

마침내 시작할 시간이 있기를 기대했지만, 이것은 첫 번째 문제 해결 작업보다 약간 더 커 보인다. include로 iostream을 사용하려고했습니다. 우분투 11.04에서 실행하고 있습니다. 아마도 gcc를 업데이트하거나 g ++을 사용해야합니다. 이걸 지나서 내가 쉽게 풀 수 있을지 모르겠다. 나는 '... std'를 ...와 함께 사용하여 몇 가지 시도를했다. 적절한 이름으로 기억하지 못한다. (oops). 누구든지 권리가 있음을 알고 있습니다.

#include "std_lib_facilities.h" 

int main() 
{ 
    cout<<"hiya people\n"; 
    return 0; 
} 
+0

C++을 컴파일하고 링크하려면'g ++'를 사용하십시오. – Mat

+0

@ 마크 : Stroustrup은 [한 권 이상의 책] (http://www.stroustrup.com/Programming/)을 가지고 있습니다. – ybungalobill

+0

뿌리로하지 마십시오. – Jookia

답변

6

gcc는 g ++를 사용해야합니다. gcc는 C 컴파일러 (C++이 아님)이기 때문입니다.

+0

이것은 사실이다. gcc는 C++ 컴파일러이지만 stdlib와 자동으로 연결되지는 않습니다. – 111111

+0

고맙습니다. 계속 공부할 수 있습니다. 좋은 코멘트 - – user916843

2

이이 문제를 해결해야한다 - 여기

는 코드입니다.

#include <iostream> 

int main() 
{ 
    std::cout <<"hello world!" << std::endl; 
    return 0; 
} 

그런데 책은 당신이 어떤 이유로 그것을하기를 바랄 수도 있습니다. 이러한 오류는 링크 시간 오류입니다. 코드가 컴파일 된 후 헤더 파일과 함께 다른 컴파일 된 코드와 링크해야합니다. lib 파일이 있어야합니다. 이것을 컴파일러 매개 변수로 추가해야합니다.

EDIT : 추가 검사를 마치면 stdlib와 자동으로 연결되는 g ++ 대신 gcc를 사용함에 따라 눈에 띄지 않는 "링크"가 표준 라이브러리로 보인다.

+0

@Mat : 그래, 내가하는 방식이다. 나는 방금 내 대답에 홱 잡아 당겨 붙여 넣었다. – 111111

+2

'endl'은'\ n'과 같지 않습니다. 실제로 버퍼를 비우고 싶지 않으면 사용하지 마십시오. 그리고 출구 근처에서 물을 뿜어내는 것은 불필요합니다. –

+0

안녕하세요 세상의 경우 버퍼를 플러시하고 싶을지라도 저는 이것을 알고 있습니다. (버퍼가 스트림 소멸자에서 플러시하는 것을 상상하지만) – 111111

1

iostream 헤더 파일을 사용하십시오. 사용중인 헤더 파일이 아닌 iostream을 사용하십시오.

또한 gcc가 아닌 g ++를 사용해야합니다. gcc는 C 용 컴파일러이고 g ++는 C++ 용입니다

관련 문제