Почему LDFLAGS помещает мои библиотеки перед объектными файлами, генерирующими неопределенные ссылки? - PullRequest
0 голосов
/ 08 ноября 2018

Вот что происходит.

$ LDFLAGS=-ltestu01 make exemplo
cc   -ltestu01  exemplo.c   -o exemplo
/home/melba/tmp/ccO2KkjG.o: In function `main':
exemplo.c:(.text+0x6e): undefined reference to `unif01_CreateExternGenBits'
exemplo.c:(.text+0x7e): undefined reference to `bbattery_SmallCrush'
exemplo.c:(.text+0x8a): undefined reference to `unif01_DeleteExternGenBits'
collect2: error: ld returned 1 exit status
<builtin>: recipe for target 'exemplo' failed
make: *** [exemplo] Error 1
%

Я ожидал, что команда будет cc exemplo.c -o exemplo -ltestu01. Как я могу убедиться, что подсказки компоновщику идут в конец командной строки?

1 Ответ

0 голосов
/ 08 ноября 2018

make -p печатает рецепты по умолчанию.

Ваш рецепт должен быть:

%: %.c
#  recipe to execute (built-in):
        $(LINK.c) $^ $(LOADLIBES) $(LDLIBS) -o $@

Из этого должно быть очевидно, что вы должны установить LDLIBS, а не LDFLAGS.

make exemplo LDLIBS=-ltestu01 -B

работает

cc     examplo.c  -ltestu01 -o exemplo

как и ожидалось. Кажется, намерение состоит в том, что LDFLAGS для таких вещей, как -Wl,--something.

...