2012-09-11 4 views
0

두 번째 파일에서 std :: vector를 인쇄해야하는 두 개의 파일을 생성했습니다. 내 MAIN.CPP의외부 인쇄 기능 컴파일 방법

: 오류

main.o: In function `_start': 
(.text+0x0): multiple definition of `_start' 
/usr/lib/gcc/x86_64-linux-gnu/4.6/../../../x86_64-linux-gnu/crt1.o:(.text+0x0): first defined here 
main.o: In function `_fini': 
(.fini+0x0): multiple definition of `_fini' 
/usr/lib/gcc/x86_64-linux-gnu/4.6/../../../x86_64-linux-gnu/crti.o:(.fini+0x0): first defined here 
main.o:(.rodata+0x0): multiple definition of `_IO_stdin_used' 
/usr/lib/gcc/x86_64-linux-gnu/4.6/../../../x86_64-linux-gnu/crt1.o:(.rodata.cst4+0x0): first defined here 
main.o: In function `__data_start': 
(.data+0x0): multiple definition of `__data_start' 
/usr/lib/gcc/x86_64-linux-gnu/4.6/../../../x86_64-linux-gnu/crt1.o:(.data+0x0): first defined here 
main.o: In function `__data_start': 
(.data+0x8): multiple definition of `__dso_handle' 
/usr/lib/gcc/x86_64-linux-gnu/4.6/crtbegin.o:(.data+0x0): first defined here 
main.o: In function `_init': 
(.init+0x0): multiple definition of `_init' 
/usr/lib/gcc/x86_64-linux-gnu/4.6/../../../x86_64-linux-gnu/crti.o:(.init+0x0): first defined here 
/usr/lib/gcc/x86_64-linux-gnu/4.6/crtend.o:(.dtors+0x0): multiple definition of `__DTOR_END__' 
main.o:(.dtors+0x8): first defined here 
/usr/bin/ld: error in main.o(.eh_frame); no .eh_frame_hdr table will be created. 
collect2: ld returned 1 exit status 
다음

g++ -g main.cpp -o main.o 
g++ -g -c print.cpp -o print.o 
g++ -o main main.o print.o 

얻을 : 내가 함께 해당 파일을 컴파일

#include <iostream> 
#include <iterator> 
#include <algorithm> 
#include <vector> 

template <typename T> void printVec(T vec) { 
std::copy(vec.begin(), vec.end(), std::ostream_iterator<int>(std::cout, " ")); 
std::cout << std::endl; 
} 

template void printVec< std::vector<int> >(std::vector<int> t); 

print.cpp에게의

#include <vector> 
int main() { 

std::vector<int> vec; 
vec.push_back(1); 
vec.push_back(2); 
vec.push_back(3); 
vec.push_back(4); 
vec.push_back(5); 
return 0; 
} 

어떻게 실행시켜야하나요?

+0

정말로 main.cpp에 두 번째 main() 함수가 없습니까? 링커는 이중 정의 된 기호에 대해 불평합니다. 이것은 인쇄 기능과 아무 관련이 없습니다. –

+1

main.cpp 컴파일시 -c가 누락되었습니다. –

답변

6

변경 :

g++ -g -c main.cpp -o main.o 
g++ -g -c print.cpp -o print.o 
g++ -o main main.o print.o 

또는 대안 당신은 단지 하나에 3 개 작업을 결합 (그리고 당신이 그것에있는 동안 경고를 활성화) 할 수 있습니다 :

g++ -g main.cpp -o main.o 
g++ -g -c print.cpp -o print.o 
g++ -o main main.o print.o 

g++ -g -Wall -o main main.cpp print.cpp 
+0

한 명령'g ++ -g -o main main.cpp print.cpp'가 작동하지 않는 이유는 무엇입니까? – john

+0

@john : 감사합니다. 예, 한 번에 모든 것을 할 수 있습니다. 대체 솔루션으로 대답에 추가하겠습니다. –

+0

@PaulR 어디에서 명령 줄 인수를 사용하는지 배울 수 있습니까? – 0x499602D2