2016-11-24 11 views
0

私はSetup Guide of another Postに続き、XCodeをROOT IDEとして使用しています。今私は、同じプロジェクト内Minuit2 example codeを含めることを試みた:Cern ROOT XCode IDEがコンパイルされない

:私は根のマクロとしてコードをテストし、それがうまく働いたが、XCodeの中でそれをコンパイルしようとすると、次のエラーを得
#include "Minuit2/Minuit2Minimizer.h" 
#include "Math/Functor.h" 

double RosenBrock(const double *xx) 
{ 
    const double_t x = xx[0]; 
    const double_t y = xx[1]; 
    const double_t tmp1 = y-x*x; 
    const double_t tmp2 = 1-x; 
    return 100*tmp1*tmp1+tmp2*tmp2; 
} 

int main() 
{ 
    // Choose method upon creation between: 
    // kMigrad, kSimplex, kCombined, 
    // kScan, kFumili 

    ROOT::Minuit2::Minuit2Minimizer min (ROOT::Minuit2::kMigrad); 

    min.SetMaxFunctionCalls(1000000); 
    min.SetMaxIterations(100000); 
    min.SetTolerance(0.001); 

    ROOT::Math::Functor f(&RosenBrock,2); 
    double step[2] = {0.01,0.01}; 
    double variable[2] = { -1.,1.2}; 

    min.SetFunction(f); 

    // Set the free variables to be minimized! 
    min.SetVariable(0,"x",variable[0], step[0]); 
    min.SetVariable(1,"y",variable[1], step[1]); 

    min.Minimize(); 

    const double *xs = min.X(); 
    std::cout << "Minimum: f(" << xs[0] << "," << xs[1] << "): " 
    << RosenBrock(xs) << std::endl; 

    return 0; 
} 

アーキテクチャx86_64のため

未定義シンボル:アーキテクチャx86_64のため 定義されたシンボル: "ROOT :: Minuit2 :: Minuit2Minimizer :: SetFunction(ROOT ::数学:: IBaseFunctionMultiDimのCONST &)" から参照:main.o

で_main

とserveralより未定義のシンボル。

どうしたのですか?


私は

sudo port install root6 

を経由してMacPortsを持つROOTをインストールし、バリアント+​​ minuit2がインストールされていることを確認しました。それから私はのリンク検索パスを追加しました: あなたが

-lMinuit2 

を追加する必要があります。私はこの質問を自分自身に答えるために

root/bin/root-config --libs 

答えて

0

からもらった

Targets > Build Settings > User Header Search Paths > Debug > /opt/local/libexec/root6/include/root 
Targets > Build Settings > Other Linker Flags > Debug > -L/opt/local/libexec/root6/lib/root -lCore -lRIO -lNet -lHist -lGraf -lGraf3d -lGpad -lTree -lRint -lPostscript -lMatrix -lPhysics -lMathCore -lThread -lMultiProc -lpthread -Wl,-rpath,/opt/local/libexec/root6/lib/root -stdlib=libc++ -lm -ldl 

あなたのビルド設定の他のフラグ。 どうかして

root-config --libs 

は自動的にminuit2リンカーを追加しません。

+1

'root-config --libs'はすべてのルートライブラリを追加しません。それはコアライブラリの最小限のセットです。通常、リンカエラーが発生した場合、 'root-config --libdir'の' * .rootmap'ファイルをチェックすることができます。このファイルには、欠落しているクラスが含まれています。 – pseyfert

関連する問題