mid*_*dor 1 c automake gcc linker-errors unix-ar
我要创建一个静态库(它不是创建一个动态的一个选项),我有在使用这个静态库中的函数timer_create从time.h例如是这样的:
somelib.h:
#include <time.h>
int do_something(void);
Run Code Online (Sandbox Code Playgroud)
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;
}
Run Code Online (Sandbox Code Playgroud)
代码实际上是没有意义的,只是在那里有必要链接librt来说明我的问题,如下:
编译somelib.c后:
gcc -c -o somelib.o somelib.c -lrt
Run Code Online (Sandbox Code Playgroud)
并创建静态库:
ar rcs somelib.a somelib.o
Run Code Online (Sandbox Code Playgroud)
链接它时出现以下错误:
gcc -o someexec someexec.c -lrt ./somelib.a
Run Code Online (Sandbox Code Playgroud)
收益:
somelib.c:(.text+0x30): undefined reference to `timer_create'
somelib.c:(.text+0x44): undefined reference to `timer_destroy'
Run Code Online (Sandbox Code Playgroud)
这是我的问题的最小例子.我不确定是否可以解决这个问题,因为我的理解是,静态库必须知道librt在创建时的位置,因为它是动态的,所以如果没有链接到静态则不可能librt的版本.我仍然不经常使用静态库,所以我想知道是否有办法做这样的事情.
编译器版本:gcc 4.8.1没有设置其他标志.
gcc -c -o somelib.o somelib.c -lrt
那只是汇编,-lrt这里无关紧要.
gcc -o someexec someexec.c -lrt ./somelib.a
给定对象/库的顺序很重要.
尝试推-lrt到最后,然后它应该工作.
| 归档时间: |
|
| 查看次数: |
4311 次 |
| 最近记录: |