2012-02-22 8 views
0

Possible Duplicate:
Including files in CRunC 문제와

을 math.h는 펑과 바닥/잘라 내기를 필요로하는 간단한 함수를 작성합니다. 나는 math.h를 포함시켰다. 주 기능을 사용할 때 아무런 문제가 없습니다. 그러나 일단 별도의 int 함수를 만들려고하면 갑자기 RunC에 pow 및 floor 함수가 없으므로 오류가 발생합니다. 어떤 도움이 필요합니까?) (주 작동하지만 정확한 같은 일을하고 위의 기능을 사용하도록 전환 할 수 있다면, 그것은

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

int sumofsquares(int x){ 
    int counter = 0; 
    int temp = x; 

    while (temp != 0 || counter == 100){ 
     //temp = temp - (int)pow(floor(sqrt(temp)), 2); 
     //temp = temp - pow(temp, 0.5); 
     printf("%d\n", temp); 
     counter = counter + 1; 
    } 

    /*while(temp != 0){ 
     temp = temp - (int)pow(floor(sqrt(temp)), 2); 
     counter ++; 
    }*/ 
    return counter; 
} 

int main(void){ 
    printf("%d", (int)pow(floor(sqrt(3)), 2)); 
} 

이 일을 작동하지 않습니다 : 여기에

코드입니다

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

int sumofsquares(int x){ 
    int counter = 0; 
    int temp = x; 

    while(temp != 0){ 
     temp = temp - (int)pow(floor(sqrt(temp)), 2); 
     counter ++; 
    } 
    return counter; 
} 

int main(void){ 
    printf("%d", sumofsquares(3)); 
} 

반환이 오류 : 프로그램을 컴파일하는

/tmp/cctCHbmE.o: In function `sumofsquares': 
/home/cs136/cs136Assignments/a04/test.c:9: undefined reference to `sqrt' 
/home/cs136/cs136Assignments/a04/test.c:9: undefined reference to `floor' 
collect2: ld returned 1 exit status 
+0

지금까지 수행 한 작업을 추가 할 수 있습니까? –

+2

본질적으로 같은 질문을하지 않으셨습니까? [이전 질문] (http://stackoverflow.com/questions/9399480/including-files-in-c)에 있습니다. – Bart

+0

RunC 환경이 닫혀있는 것으로 보입니다. 왜 우분투 VM에 이미 존재하는 gcc를 사용하지 않고 RunC를 사용하는지 묻습니다. –

답변

0

사용 GCC :

당신이 main 기능을 작업에
gcc -lm -o foo foo.c 
+0

gcc 사용법을 모르겠습니다. 제출 서버가 RunC를 사용할 것으로 기대하기 때문에 RunC를 사용해야합니다. – user1222282

0

, 당신은 인수가 여기에 상수 것을

printf("%d", (int)pow(floor(sqrt(3)), 2)); 

참고 있습니다. 최적화 컴파일러는 일반적으로 컴파일 시간에 표현식을 평가하고 따라서 math.h 함수에 대한 호출을 제거하므로 수학 라이브러리를 연결하지 않아도 작동합니다. 그러나 계산에 변수가 포함 된 경우 일반적으로 컴파일 시간에 계산할 수 없으므로 math.h 함수에 대한 호출이 남아 있고 수학 라이브러리에서 연결하지 않으면 연결이 실패합니다. 시도해보십시오.

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

int main(int argc, char *argv[]) { 
    // don't really use atoi, it's here just for shortness 
    int num = argc > 1 ? atoi(argv[1]) : 3; 
    printf("%d\n", (int)pow(floor(sqrt(num)),2)); 
    return EXIT_SUCCESS; 
} 

수학 라이브러리가 컴파일러 명령 줄에서 링크되도록 지정되지 않은 경우에도 링크가 실패합니다.

이 알려진 전에이 지정된 경우 GCC에서, 명령 행은 여러 버전이 작동하지 않습니다 때문에, 명령 줄에서 마지막으로 가야에 연결되는

gcc -O3 -Wall -Wextra -o foo foo.c -lm 

라이브러리해야하는 기호가 필요합니다.

불행히도, 나는 RunC을 전혀 모르기 때문에 수학 라이브러리를 연결하는 방법을 아직 말할 수는 없지만 알아 내려고 노력하고 있습니다.

google-fu가 너무 약합니다. RunC에 대한 유용한 문서를 찾지 못했습니다. 도구 자체를 확인하기 위해 Ubuntu를 설치하지 않을 것입니다.