C 静态库无法与 librt 链接



我必须创建一个静态库(这不是创建动态库的选项),我在这个静态库中有一个函数,它使用time.h中的timer_create,例如这样:

somelib.h:

#include <time.h>
int do_something(void);

somelib.c:

int do_something(void){
        timer_t timer;
        struct sigevent sevp;
        sevp.sigev_notify = SIGEV_SIGNAL;
        sevp.sigev_signo = SIGRTMIN;
        sevp.sigev_value.sival_ptr = NULL;
        int ret = timer_create(CLOCK_MONOTONIC, &sevp, &timer);
        timer_delete(timer);
        return 0;
}

代码实际上是没有意义的,只是有必要链接到librt来说明我的prolem,如下所示:

在我编译 somelib.c 之后:

gcc -c -o somelib.o somelib.c -lrt

并制作静态库:

ar rcs somelib.a somelib.o

链接时出现以下错误:

gcc -o someexec someexec.c -lrt ./somelib.a

返回:

somelib.c:(.text+0x30): undefined reference to `timer_create'
somelib.c:(.text+0x44): undefined reference to `timer_destroy'

这是我问题的最小示例。我不确定这是否可以修复,因为我的理解是,静态库必须在创建时知道 librt 的位置,并且由于它是动态的,因此如果不链接到静态版本的 librt,就是不可能的。我仍然不经常使用静态库,所以我想知道是否有办法做这样的事情。

编译器版本:gcc 4.8.1未设置其他标志。

gcc -c -o somelib.o somelib.c -lrt

这只是编译,-lrt在这里无关紧要。

gcc -o someexec someexec.c -lrt ./somelib.a

对象/库的给定顺序很重要。

尝试将-lrt推到最后,然后它应该有效。

相关内容

  • 没有找到相关文章

最新更新