동적 라이브러리를 작성하는 방법을 파악하기 위해 기본 배열 래퍼 템플릿 클래스를 .o 파일로 컴파일하려고합니다. 그러나 소스를g ++에서 빈 오브젝트 파일을 생성합니다.
g++ -std=c++0x -c array.cpp
으로 컴파일하면 결과 파일은 약 650 바이트에 불과합니다. 나는 나노를 사용하여 파일을 조사하고, 그것이 포함 된 유일한 기호는 C++ 11 편집의 기능 것 같다
00000001 r _ZStL13allocator_arg
00000000 r _ZStL19piecewise_construct
이었다 발견, 그들이있는 -std = C + +0 플래그를 사용하지 않고 컴파일 때와 같이 지나간. 명령
g++ -std=c++0x -o tester tester.cpp array.cpp
으로 프로그램 테스트 코드를 모두 컴파일하려고
는array.cpp에서 모든 것을 링커 오류를 생성하지만, 그렇지 않으면 깨끗하게 컴파일합니다.
나는 솔직히 이것으로 무슨 일이 벌어지고 있는지 전혀 모른다. array.cpp 및 array.hpp의 내용을 게시 할 수 있습니다.이 코드를 컴파일하는 방법보다는 내 코드 자체에서 문제가 있다고 생각하면됩니다.
인스턴스가 생성되지 않은 템플릿을 컴파일하려고합니까? – ildjarn
템플릿은 코드 생성 도구만큼 코드가 아닙니다. 실제 코드 만 컴파일됩니다. –
tester.cpp에서 배열으로 인스턴스화됩니다. 필자는 tester.cpp없이 컴파일을 시도하여 왜 .cpp에있는 모든 함수에도 불구하고 두 번째 (시간순으로 첫 번째) 컴파일 명령으로 링커 오류가 발생하는 이유를 알아 냈습니다. –