我正在编写一个使用librt的小型C程序.如果我将链接标志放在开头而不是结尾处,那么程序将无法编译,我感到非常惊讶:
目前,要编译我执行的程序:
gcc -o prog prog.c -lrt -std=gnu99
如果我要执行以下操作,它将无法在librt中找到函数:
gcc -std=gnu99 -lrt -o prog prog.c
然而,这适用于其他图书馆.我在尝试使用简单的Makefile时发现了这个问题.make实际编译prog.c而不首先喜欢(使用-c标志),然后进行链接.
这是Makefile:
CC = gcc
CFLAGS = -std=gnu99
LIBS= -lrt
LDFLAGS := -lrt
prog: prog.o
$(CC) -o prog prog.c -lrt -std=gnu99
Run Code Online (Sandbox Code Playgroud)
输入make时我得到的输出是:
gcc -std=gnu99 -c -o prog.o prog.c
gcc -lrt prog.o -o prog
prog.o: In function `main':
prog.c:(.text+0xe6): undefined reference to `clock_gettime'
prog.c:(.text+0x2fc): undefined reference to `clock_gettime'
collect2: ld returned 1 exit status
make: *** [buff] Error 1
Run Code Online (Sandbox Code Playgroud)
我现在已经制作了一个Makefile,它将链接放在gcc行的末尾,但是我很困惑,如果链接标志位于开头,它为什么不起作用.
如果有人能向我解释,我将不胜感激.谢谢.