Ubuntu 12.04でCERNのROOTを操作しているときに、この非常に厄介な問題に遭遇しましたが、より一般的な問題だと思います。
次のmakefileを使用してコンパイルおよびリンクする外部参照を含むC++コードがいくつかあります。OS X 10.8を搭載したMacとSL5を搭載したサーバーでは、これは正常に機能します。
CXX=clang++
CXXFLAGS=-Wall -O2 -g $(shell root-config --cflags --libs)
testroot: testroot.cc
に評価します
clang++ -Wall -O2 -g -pthread -m64 -I/opt/ROOT/5.34.05/include/root -L/opt/ROOT/5.34.05/lib/root -lCore -lCint -lRIO -lNet -lHist -lGraf -lGraf3d -lGpad -lTree -lRint -lPostscript -lMatrix -lPhysics -lMathCore -lThread -pthread -lm -ldl -rdynamic testroot.cc -o testroot
これにより、Ubuntuサーバーで未定義の参照とリンカーエラーが発生します。私はすでにライブラリを設定しようとしましLDFLAGS
たが、同じ結果が得られます。手動でコンパイルし、ソースファイルと-oオプションをライブラリの前に置くと、問題なくコンパイルされます。
他のスレッドから、コマンドの順序が重要である可能性があることを理解しましたが、なぜそれが一部のマシンで機能し、他のマシンでは機能しないのか疑問に思います。make
順序が重要だったとしても、私はそれを自分で理解するのに十分賢いと思いました。
今の質問は次のとおりです。どうすればこれを回避できますか?別のバージョンのmakeまたはldを使用する必要がありますか?makefileを変更する必要がありますか?
前もって感謝します!