web-dev-qa-db-ja.com

clang:警告:-l *:未使用の「リンカー」入力

GNUを使用してコードをコンパイルすると、次のような複数の警告が表示されます:

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
19
mareks

このメッセージは、リンカーフラグ(ライブラリーにプルするようリンカーに指示する_-l_など)をコンパイラーに渡していることを意味します。

これは、_root-config --cflags --glibs_の実行結果がリンカーフラグを生成し、それらがCXXFLAGSに送られ、コンパイラーに渡されることを意味します。 _root-config_が何であるかはわかりませんが、コマンドラインを調べて、リンカーフラグを生成しない方法で呼び出す必要があります。おそらく_--glibs_オプションを削除することでそれが可能になります。

ETA:あなたreally _:=_を使用して、$(Shell ...)を実行する場合は、これらのフラグ変数を割り当てます。どちらの方法でも機能しますが、_=_を使用すると、シェルコマンドが実行されますmakeが実行するたびに変数が展開されます。これはコンパイルごとに1回です。 _:=_を使用すると、makefileが解析されるときに1回だけ実行されます。

13
MadScientist

これと同じエラーが発生しました。その理由は、メイクファイルのcflagsのインクルードパスの前に-Iを追加し忘れたためです。例えば:

CFLAGS += $(path)/dir/subdir/include     -> Got the above mentioned error.
CFLAGS += -I$(path)/dir/subdir/include   -> Fixed the issue.
3
ManyuBishnoi