2009-09-28 1 views
1

다음 코드를 컴파일하여 LD_PRELOAD?와 작동하게하려면 어떻게해야합니까? 나는 나가에 코드 '분사'에 노력하고있어 프로그램을 열 때 'gcc -m32 -shared code.c는'하지만, 그것은이 말한다에 오류하여 w/o 컴파일 관리 'symbol lookup error: ./fps.so: undefined symbol: clock_gettime'리눅스에서 LD_PRELOAD를 사용하려면이 코드를 어떻게 컴파일합니까?

#include<unistd.h> 
#include<time.h> 
#define BUSY_WAIT  3000 
/* We use clock_gettime because it's better than gettimeofday */ 

unsigned long long int fetch_clock() 
{ 
     struct timespec ts; 
     clock_gettime(CLOCK_REALTIME, &ts); 
     return (unsigned long long int)ts.tv_nsec + 1000000*ts.tv_sec; 
} 

int high_pres_usleep_untill(unsigned long long int end) 
{ 
     unsigned long long int busywait, start; 
     int sleep, delay; 

     start = fetch_clock(); 
     delay = end - start; 

     sleep = (delay/BUSY_WAIT) - 1; 
     if(sleep > 0) 
       if(usleep(sleep*BUSY_WAIT)) 
         return -1; 
     while(fetch_clock() < end) 
       ; 

     return 0; 
} 
+0

초에 몇 나노초가 있습니까? 그리고 여러분은 곱셈의 피연산자 중 하나를 나노초 값 이상으로 캐스팅해야합니다. –

답변

4

당신은 연결해야합니다 당신의 clock_gettime을 사용하기 위해 librt가있는 공유 라이브러리.

gcc -m32 -shared code.c -lrt 
+0

위대한 작품! 고마워요 :) –

-1

fetch_clock 함수가 작동하지 않습니다.

+0

이유를 설명하지 않겠습니까? 그런 부정적인 말을 남기면 명성을 얻지 못할 것입니다. (당신 말이 맞습니다.하지만 그 이유를 말해야합니다!) –