我要创建一个静态库(它不是创建一个动态选择一个选项),和我在这个静态库,它使用的函数timer_create
从time.h
例如是这样的:
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以说明我的问题,如下所示:
在我编译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
到最后,然后它应该起作用。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句