Я пишу небольшую программу на C, которая использует librt.Я весьма удивлен тем, что программа не будет компилироваться, если я поставлю флаг ссылки в начале, а не в конце:
В данный момент для компиляции программы я делаю:
gcc -o prog prog.c -lrt -std=gnu99
Если бы я сделал следующее, он не смог найти функции в librt:
gcc -std=gnu99 -lrt -o prog prog.c
Тем не менее, это работает с другими библиотеками.Я обнаружил проблему при попытке использовать простой Makefile.сделать фактически скомпилированный 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,be:
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
Теперь я создал Make-файл, который помещает ссылку в конец строки gcc, однако я озадачен, почему он не работает, если флаг ссылки находится в начале.
Буду признателен, если кто-нибудь сможет мне это объяснить.Спасибо.