【问题标题】:clang: warning: -l*: 'linker' input unused叮当声:警告:-l *:“链接器”输入未使用
【发布时间】: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

【问题讨论】:

    标签: makefile gnu-make


    【解决方案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.
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2021-02-03
      • 1970-01-01
      • 2017-04-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-08-05
      相关资源
      最近更新 更多