표준 바이너리가 언제 내 바이너리에 링크되는지 이해하려고합니다. 나는 다음과 같은 쓴 : 그것은 g++ -c main.cpp
에 성공적으로 컴파일하는 것표준 C++ 라이브러리 연결
#include <stdio.h>
double atof(const char*);
int main(){
const char * v="22";
printf("Cast result is %f", atof(v));
}
을하지만 방금 만든 오브젝트 파일을 링크하고있을 때 나는 오류를했습니다. 오류 설명은 다음과 같습니다.
/tmp/ccWOPOS0.o: In function `main':
main.cpp:(.text+0x19): undefined reference to `atof(char const*)'
collect2: error: ld returned 1 exit status
그러나이 오류의 원인은 무엇입니까? 내 생각에 표준 C++ 라이브러리는 자동으로 내 이진 파일 인 ld
링커에 연결되어 있다고 생각합니다. 헤더 파일을 포함하는 것과 단순히 명시 적으로 사용해야하는 함수를 선언하는 것의 차이점은 무엇입니까?
@PaulR - 물론 정확합니다. 나는 실수를 고쳤다. –
답변 해 주셔서 감사합니다. 하지만 몇 가지 의구심이 있습니다. 순수한 C++ 표준 함수의 경우 추가 수정 자없이 선언 할 수 있습니까? 그리고 저는이 경우 extern "C"를 해결하는 방법에 대해 매우 흥미 롭습니다. –
@DmitryFucintv - 나는 extern "C"가 표준 C++라고 생각한다. 그러나 take-home 메시지는 표준 함수를 직접 선언하는 대신 헤더를 사용하는 것입니다. 왜 직접 함수를 선언하고 싶습니까? 이것에 약간의 유익이 있습니까? –