sqrt(또는 다른 수학 함수)에 대한 참조가 정의되지 않았습니다.
간단한 코드가 있습니다.
max = (int) sqrt (number);
머리글에는 다음과 같은 내용이 있습니다.
#include <math.h>
그러나 응용 프로그램에서 아직 정의되지 않은 참조가 표시됩니다.sqrt여기 무슨 문제라도 보입니까?모든 게 괜찮을 것 같아요.
사용 중인 시스템의 수학 라이브러리와 다음과 같은 링크를 연결해야 할 수 있습니다.
gcc -o myprog myprog.c -L/path/to/libs -lm
^^^ - this bit here.
헤더를 포함하면 컴파일러는 함수 선언에 대해 알 수 있지만 반드시 해당 함수를 수행하기 위해 필요한 코드에 자동으로 링크되는 것은 아닙니다.
그렇지 않으면 코드, 컴파일 명령어 및 실행 중인 플랫폼(운영체제, 컴파일러 등)을 제시해야 합니다.
다음 코드는 컴파일 및 링크 상태가 양호합니다.
#include <math.h>
int main (void) {
int max = sqrt (9);
return 0;
}
일부 컴파일 시스템은 명령줄에서 라이브러리가 지정된 순서에 따라 달라집니다.즉, 라이브러리를 순차적으로 처리하여 해결되지 않은 기호를 만족시키기 위해서만 사용할 수 있습니다.
예를 들어 다음과 같은 명령어가 있습니다.
gcc -o plugh plugh.o -lxyzzy
gcc -o plugh -lxyzzy plugh.o
그리고.plugh.o로부터 무언가를 필요로 한다.xyzzy두 번째 라이브러리는 예상대로 작동하지 않을 수 있습니다.라이브러리를 나열하는 시점에는 충족시킬 수 있는 확인되지 않은 기호가 없습니다.
그리고 풀리지 않은 기호들이plugh.o 나타나라, 너무 늦었어.
내 생각에 당신은 math.h 를 가지고 있는 것 같다.#include <math.h>
제가 볼 수 있는 유일한 이유는 링크 정보가 누락되었기 때문입니다.코드를 링크해야 합니다.-lm선택.
단순히 gcc를 사용하여 하나의 파일을 컴파일하려는 경우-lm그렇지 않으면 구축 프로세스에 대한 몇 가지 정보를 제공합니다.
여기 제 의견이 있습니다. 먼저 헤더를 포함해야 합니다.math.h~하듯이sqrt()선언된 함수math.h헤더 파일예:
#include <math.h>
두 번째로, sqrt의 매뉴얼 페이지를 읽으시면 이 행과 -lm을 함께 링크하는 것을 알 수 있습니다.
#include <math.h> /* header file you need to include */
double sqrt(double x); /* prototype of sqrt() function */
Link with -lm. /* Library linking instruction */
그러나 응용 프로그램에서 sqrt에 대한 정의되지 않은 참조가 여전히 표시됩니다.여기 무슨 문제라도 보이세요?
프로그램과 라이브러리를 연결하지 않았으므로 컴파일러 오류가 수정되었습니다.lm링커에서 참조를 찾을 수 없습니다.sqrt()를 명시적으로 링크해야 합니다.예:
gcc -Wall -Wextra -Werror -pedantic test.c -lm
추가만 하면 됩니다.#include <math.h>c source file과 -lm in Make file이 끝납니다.
gcc -pthread -o p3 p3.c -lm
저도 같은 문제가 있었습니다만, 코드를 실행하는 명령어 뒤에 -lm을 추가하는 것으로 간단하게 해결했습니다.예.gcc 코드.c -lm
언급URL : https://stackoverflow.com/questions/5248919/undefined-reference-to-sqrt-or-other-mathematical-functions
'programing' 카테고리의 다른 글
| 서버 이름 표시(SNI) 구현 방법 (0) | 2022.08.08 |
|---|---|
| Vuex 저장소에서 브라우저 이벤트 듣기 (0) | 2022.08.07 |
| 목표 C를 배우기 전에 먼저 C를 배운다. (0) | 2022.08.07 |
| 어레이 또는 중첩된 데이터가 포함된 Vuex 양방향 계산 속성 (0) | 2022.08.07 |
| Vuex 스토어에서 JWT 토큰을 새로 고친 후 Axios를 사용하여 요청 재시도 (0) | 2022.08.07 |