C静态库无法与librt链接

时间:2015-03-16 13:33:45

标签: c gcc linker-errors automake ar

我必须创建一个静态库(它不是创建动态库的选项),我在这个静态库中有一个函数,它使用来自timer_create的{​​{1}},例如像这样的东西:

somelib.h:

time.h

somelib.c:

#include <time.h>

int do_something(void);

代码实际上是没有意义的,只是在那里有必要链接librt来说明我的问题,如下:

编译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;
}

并制作静态库:

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

链接时出现以下错误:

ar rcs somelib.a somelib.o

返回:

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

这是我的问题的最低限度示例。我不确定是否可以解决这个问题,因为我的理解是,静态库必须知道librt在创建时的位置,因为它是动态的,所以如果没有链接到静态则不可能librt的版本。我仍然不经常使用静态库,所以我想知道是否有办法做这样的事情。

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

1 个答案:

答案 0 :(得分:7)

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

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

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

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

尝试将-lrt推到最后,然后就可以了。

相关问题