繁体   English   中英

我如何在Linux上将此代码编译为与LD_PRELOAD一起使用?

[英]How do i compile this code to work with LD_PRELOAD on linux?

如何编译以下代码使其可与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;
}

您必须将共享库与librt链接起来才能使用clock_gettime。

gcc -m32 -shared code.c -lrt

请注意,您的fetch_clock函数已损坏。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM