我知道为了使用clock_gettime(2)
函数,你必须在makefile中包含-lrt
,但我不知道它在哪里。我将把它放在示例makefile中。
CFLAGS = -g -Wall -std=c99
CC = gcc
objects = example.o
example: $(objects)
$(CC) $(CFLAGS) -o example $(objects)
example.o: example.c
$(CC) $(CFLAGS) -c example.c
clean:
rm test $(objects)
编辑:我的lrt看起来如何。
我的代码是什么:
#include "stdio.h"
#include "stdlib.h"
#include <time.h>
int main(int argc, char *argv[]) {
struct timespec starttime, endtime;
double elapsed;
clock_gettime(CLOCK_REALTIME, &starttime);
/// work to be timed
clock_gettime(CLOCK_REALTIME, &endtime);
elapsed = ((endtime.tv_sec-starttime.tv_sec)*1000000000.0 + (endtime.tv_nsec - starttime.tv_nsec))/1000000000;
// elapsed time can also be calculated as
if (endtime.tv_nsec < starttime.tv_nsec) {
// borrow a second
elapsed = (endtime.tv_sec - starttime.tv_sec - 1) + (1000000000.0 + endtime.tv_nsec - starttime.tv_nsec)/1000000000;
}
else {
elapsed = (endtime.tv_sec - starttime.tv_sec ) + (endtime.tv_nsec - starttime.tv_nsec)/1000000000;
}
}
答案 0 :(得分:3)
您希望将其放在链接可执行文件的行上。即,指定-o
选项的行。这就是执行链接器阶段的地方。
example: $(objects)
$(CC) $(CFLAGS) -o example $(objects) -lrt
答案 1 :(得分:0)
CFLAGS = -g -Wall -std=c99
CC = gcc
LDFLAGS = -lrt
objects = example.o
example: $(objects)
$(CC) $(CFLAGS) -o example $(objects) $(LDFLAGS)
example.o: example.c
$(CC) $(CFLAGS) -c example.c
clean:
rm test $(objects)
由于这是链接器选项,因此最好用作LDFLAGS变量,这是Makefile中的常见做法。
答案 2 :(得分:0)
其他答案是正确的,但您的问题似乎是您没有包含必要的头文件。
在源代码中添加:
#include <time.h>