gpt4 book ai didi

C 静态库无法与 librt 链接

转载 作者:太空宇宙 更新时间:2023-11-04 00:36:56 24 4
gpt4 key购买 nike

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

somelib.h:

#include <time.h>

int do_something(void);

一些库.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 推到最后,然后它应该可以工作。

关于C 静态库无法与 librt 链接,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29078160/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com