Я пишу небольшую программу на C, которая использует librt. Я очень удивлен тем, что программа не будет компилироваться, если я поставлю флаг ссылки в начале, а не в конце:
На данный момент для компиляции программы я делаю:
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
Результат, который я получил бы при вводе 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
Теперь я создал Makefile, который помещает ссылку в конец строки gcc, однако я озадачен тем, почему он не работает, если флаг привязки находится в начале.
Буду признателен, если кто-нибудь сможет мне это объяснить. Спасибо.