C 静态库不能 link with librt
C static library cannot link with 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;
}
代码实际上是没有意义的,只是为了link 反对 librt 来说明我的问题,如下所示:
编译后somelib.c:
gcc -c -o somelib.o somelib.c -lrt
并制作静态库:
ar rcs somelib.a somelib.o
我在 link 反对它时收到以下错误:
gcc -o someexec someexec.c -lrt ./somelib.a
returns:
somelib.c:(.text+0x30): undefined reference to `timer_create'
somelib.c:(.text+0x44): undefined reference to `timer_destroy'
这是我的问题的最小示例。我不确定这是否可以完全解决,因为我的理解是,静态库必须在创建时知道 librt 的位置,并且由于它是动态的,所以没有 [=42= 是不可能的]针对静态版本的 librt。不过我不经常使用静态库,所以我想知道是否有办法做这样的事情。
编译器版本:gcc 4.8.1
没有设置其他标志。
gcc -c -o somelib.o somelib.c -lrt
这只是编译,-lrt
与这里无关。
gcc -o someexec someexec.c -lrt ./somelib.a
给定 objects/libraries 的顺序很重要。
尝试将-lrt
推到最后,应该可以。
我必须创建一个静态库(创建动态库不是一个选项),并且我在这个静态库中有一个函数使用 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;
}
代码实际上是没有意义的,只是为了link 反对 librt 来说明我的问题,如下所示:
编译后somelib.c:
gcc -c -o somelib.o somelib.c -lrt
并制作静态库:
ar rcs somelib.a somelib.o
我在 link 反对它时收到以下错误:
gcc -o someexec someexec.c -lrt ./somelib.a
returns:
somelib.c:(.text+0x30): undefined reference to `timer_create'
somelib.c:(.text+0x44): undefined reference to `timer_destroy'
这是我的问题的最小示例。我不确定这是否可以完全解决,因为我的理解是,静态库必须在创建时知道 librt 的位置,并且由于它是动态的,所以没有 [=42= 是不可能的]针对静态版本的 librt。不过我不经常使用静态库,所以我想知道是否有办法做这样的事情。
编译器版本:gcc 4.8.1 没有设置其他标志。
gcc -c -o somelib.o somelib.c -lrt
这只是编译,-lrt
与这里无关。
gcc -o someexec someexec.c -lrt ./somelib.a
给定 objects/libraries 的顺序很重要。
尝试将-lrt
推到最后,应该可以。