1

次のコードをコンパイルして LD_PRELOAD で動作させるにはどうすればよいですか? 「 」でエラーなしでコンパイルできましたgcc -m32 -shared code.cが、コードを「挿入」しようとしているプログラムを開くと、次のように表示されます:「symbol lookup error: ./fps.so: undefined symbol: clock_gettime

#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;
}
4

2 に答える 2

4

clock_gettime を使用するには、共有ライブラリを librt にリンクする必要があります。

gcc -m32 -shared code.c -lrt
于 2009-09-28T01:22:19.217 に答える
-1

fetch_clock 関数が壊れていることに注意してください。

于 2009-09-28T02:22:50.880 に答える