叮当声:警告:-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 *:“链接器”输入未使用的主要内容,如果未能解决你的问题,请参考以下文章

Xcode 链接器问题

铿锵声:错误:链接器命令失败,退出代码为 1(使用 -v 查看调用)而实现?

使用编译器/链接器进行 C++ 代码清理

无法使用解析库:解析链接器警告:文件是为不受支持的文件格式构建的

铿锵声“你好,世界!” windows中的链接错误

这些'未定义的对 __glut*WithExit' OpenGL 链接器错误的引用是啥意思? [复制]