math.h를 사용하고 -lm 없이 개체 파일을 연결하세요.

math.h를 사용하고 -lm 없이 개체 파일을 연결하세요.

현재 Advanced Linux 프로그래밍을 읽고 있는데 섹션 2.3.3에서 math.h의 특정 기능을 사용하려면 개체 파일을 -lm으로 연결해야 한다고 나와 있습니다. 하지만 나는 이 공유 라이브러리의 사용을 지정하지 않고 sqrt, pow 또는 log와 같은 일부 수학 함수를 사용해 왔다고 확신합니다.

문제가 어디에 있는지 아시나요?

감사해요

답변1

코드/메이크파일을 이식 가능하게 유지하려면 -lm함수를 사용할 때 항상 from을 사용해야 합니다.math.h

이 헤더의 일부 내용은 매크로(분명히 추가 라이브러리가 필요하지 않음)이지만 어떤 것(몇 가지 제외)은 지정되지 않았습니다. 일부 다른 기능은 컴파일러에 의해 내장(또는 프로세서별 opcode로 직접 대체됨), 인라인 기능 등으로 구현될 수 있습니다. 따라서 코드의 올바른 연결은 최적화 프로그램 설정 및 정확한 내용에 따라 달라질 수 있습니다. 컴파일러/버전이 사용 중입니다.

예를 들어:

#include <stdio.h>
#include <math.h>

int main()
{
    double d = 0.2;
    fprintf(stdout, "%f\n", sqrt(d));
    return 0;
}

Linux에서 GCC 4.5.1 사용:

$ gcc -o t t.c
/tmp/cczCfJsj.o: In function `main':
t.c:(.text+0x30): undefined reference to `sqrt'
collect2: ld returned 1 exit status

$ gcc -O3 -o t t.c
# ok, compiled and linked fine

따라서 골치 아픈 일을 피하려면 -lm.

관련 정보