我正在我的机器中编译KDBUS(x86-64,ubuntu 14.04)。但这个问题实际上并不相关。这是一个例子。第一个命令失败,但第二个命令成功。成功与失败取决于-lm和-lm的顺序。我以前见过这种问题。我可以手动解决这个问题。到这个时候,我想知道是否有一种方法可以在不修改-lXXX的顺序的情况下成功完成第一个命令。是否有人知道这条路?
gcc -L / usr / lib / x86_64-linux-gnu -std = gnu99 -Wall -Wextra -g -include /include/uapi/linux/memfd.h -I ../ samples / -D_GNU_SOURCE -Wno- unused-parameter -Wmaybe-uninitialized -Wredundant-decls -Wcast-align -Wsign-compare -Wno-missing-field-initializers -pthread -lm -lcap kdbus-enum.o kdbus-util.o kdbus-test.o test-activator.o test-attach-flags.o test-benchmark.o test-bus.o test-chat.o test-connection.o test-daemon.o test-endpoint.o test-fd .o test-free.o test-match.o test-message.o test-metadata-ns.o test-monitor.o test-names.o test-policy.o test-policy-ns.o test-policy- priv.o test-sync.o test-timeout.o -o kdbus-test
kdbus-util.o:在函数`do_cap_get_flag'中:
/harddisk/git/public/KDBUS/kdbus/test/kdbus-util.c:1525:对'cap_get_flag'的未定义引用
kdbus-util.o:在函数`test_is_capable'中:
/harddisk/git/public/KDBUS/kdbus/test/kdbus-util.c:1550:未定义对`cap_get_proc'的引用
/harddisk/git/public/KDBUS/kdbus/test/kdbus-util.c:1570:对'cap_free'的未定义引用
test-benchmark.o:在函数`dump_stats'中:
/harddisk/git/public/KDBUS/kdbus/test/test-benchmark.c:62:对'sqrt'的未定义引用
collect2:错误:ld返回1退出状态
gcc -L / usr / lib / x86_64-linux-gnu -std = gnu99 -Wall -Wextra -g -include /include/uapi/linux/memfd.h -I ../ samples / -D_GNU_SOURCE -Wno- unused-parameter -Wyybe-uninitialized -Wredundant-decls -Wcast-align -Wsign-compare -Wno-missing-field-initializers -pthread kdbus-enum.o kdbus-util.o -lcap kdbus- test.o test-activator.o test-attach-flags.o test-benchmark.o -lm test-bus.o test-chat.o test-connection.o test-daemon.o test -endpoint.o test-fd.o test-free.o test-match.o test-message.o test-metadata-ns.o test-monitor.o test-names.o test-policy.o test-policy- ns.o test-policy-priv.o test-sync.o test-timeout.o -o kdbus-test
kdbus-test: $(OBJS)
@echo ' TARGET_LD $@'
@echo $(Q)$(CC) $(CFLAGS) $(LDFLAGS) $^ -o $@
$(Q)$(CC) $(CFLAGS) $(LDFLAGS) $^ -o $@
这是上面编译命令的makefile。我认为这种类型的makefile很常见。我该如何修改这个makefile才能工作?
kdbus-test: $(OBJS)
@echo ' TARGET_LD $@'
@echo $(Q)$(CC) $(CFLAGS) $(LDFLAGS) $^ -o $@
$(Q)$(CC) $(CFLAGS) $^ -o $@ $(LDFLAGS)
在我添加上述附加问题后,我发现此代码有效。在Mike Kinghan和这个工作代码的评论之后,将LDFLAGS放在目标文件之后是否正确?