叮当声:警告:-l *:“链接器”输入未使用
Posted
技术标签:
【中文标题】叮当声:警告:-l *:“链接器”输入未使用【英文标题】:clang: warning: -l*: 'linker' input unused 【发布时间】:2013-11-04 18:44:56 【问题描述】:当我使用 GNU Make 编译代码时,我收到多个警告,例如:
clang: warning: -lGui: 'linker' input unused
这可能是因为我在 Makefile 中弄乱了一些东西(如下)。谁能指出我的问题?
CXX=g++
CC=g++
CXXFLAGS=-g -Wall -W -Wshadow -Wcast-qual -Wwrite-strings $(shell root-config --cflags --glibs)
CPPFLAGS+=-MMD -MP
LDFLAGS=-g $(shell root-config --ldflags)
LDLIBS=$(shell root-config --libs)
xSec_x: xSec_x.o xSec.o Analysis.o
-include xSec_x.d xSec.d Analysis.d
xSec.o: xSec.cpp xSec.h Analysis.h Analysis.cpp
xSec_x.o: xSec_x.cpp xSec.h Analysis.h
clean:
rm -f @rm -f $(PROGRAMS) *.o *.d
【问题讨论】:
【参考方案1】:该消息意味着您正在将链接器标志(例如 -l
告诉链接器拉入库)传递给编译器。
这意味着运行root-config --cflags --glibs
的结果是生成链接器标志,这些标志将进入CXXFLAGS
,并传递给编译器。我不知道root-config
是什么,但您应该调查它的命令行并以不生成链接器标志的方式调用它。可能删除--glibs
选项就可以了。
ETA:你真的想要使用:=
来分配这些标志变量,如果你要在那里运行$(shell ...)
。无论哪种方式都可以,但是如果您使用=
,那么 每次 make 扩展变量时都会运行 shell 命令,每次编译运行一次。如果你使用:=
,它只会在makefile被解析时运行一次。
【讨论】:
太棒了!感谢您提供这些提示! 天啊!我正在将所有链接器标志传递给编译器......我希望 clang 更具描述性。该错误听起来像是 lib 被忽略了,因为代码从未使用过它的符号。【参考方案2】:我遇到了同样的错误,原因是我忘记在 makefile 中包含的 cflags 路径前添加-I
。例如:
CFLAGS += $(path)/dir/subdir/include -> Got the above mentioned error.
CFLAGS += -I$(path)/dir/subdir/include -> Fixed the issue.
【讨论】:
以上是关于叮当声:警告:-l *:“链接器”输入未使用的主要内容,如果未能解决你的问题,请参考以下文章
铿锵声:错误:链接器命令失败,退出代码为 1(使用 -v 查看调用)而实现?