编译 警告 linker input unused

xxx-linux-clang: warning: -lc: 'linker' input unused
xxx-linux-clang: warning: -lm: 'linker' input unused
xxx-linux-clang: warning: -Z-reserved-lib-stdc++: 'linker' input unused
xxx-linux-clang: warning: -lpthread: 'linker' input unused

上面的warning 是因为:

LIBS = -lm -lc -lpthread

##-$(CC) $(C_INCLUDE) $(CFLAGS) -I. $(LIBS) -c $< -o $@

应该去掉 $(LIBS)

原因:http://hi.baidu.com/zeyu203/item/d667ff12c7982c2df6625ccb

使用-c是编译成.o的中间文件,这一步只检查语法错误,不检查依赖关系,所以不能加-l,因为既然不检查依赖关系,你给他指明链接文件,岂不多余

但是-l还是要加的,只要在使用.o文件最终链接时加上就可以了,无论依赖关系多么复杂,只要记住一个c一个o,然后把一个文件夹里的o弄到一个链接库a里,最后用所有的o,-l所有的a,链接成为可执行文件

 

一句话,编译是编译,链接是链接,编译的时候不能链接,链接的时候不要再编译,所以-c与-l两个选项不能同时使用

 

修改后的 Makefile 段落:

all:$(PRG)

$(PRG): $(NObjs)
    -$(CC) $^ -o  $@  $(C_INCLUDE) $(LIBS) $(CFLAGS)
    -rm -f $^

 %.o: %.c
    -$(CC) $(C_INCLUDE) $(CFLAGS) -I. -c $< -o $@
 %.o: %.cpp
    -$(CXX) $(C_INCLUDE) $(CPPFLAGS) -I. -c $< -o $@
 %.o: %.cc
    -$(CC) $(C_INCLUDE) $(CFLAGS) -I. -c $< -o $@
 %.o: %.C
    -$(CC) $(C_INCLUDE) $(CFLAGS) -I. -c $< -o $@
   

posted on 2014-05-14 11:17  efforts and success  阅读(5103)  评论(0编辑  收藏  举报

导航