簡體   English   中英

使用 cmake 在 Mac 中構建 ROOT 類“RooUnfold”時出現鏈接器錯誤

[英]Linker error while building a ROOT class "RooUnfold" in Mac using cmake

我想做的事
我想在 Mac 中構建一個 ROOT 類“RooUnfold”。

問題
如何解決當我嘗試使用 cmake 構建 RooUnfold 時發生的鏈接器錯誤( ld: library not found for -lgcov clang: error: linker command failed with exit code 1 (use -v to see invocation) )?

我做了什么
(1) 我在我的 Mac 上安裝了 ROOT。 它成功地工作。
(2) 我從網上下載並解壓了“RooUnfold-master.zip”( https://gitlab.cern.ch/RooUnfold/RooUnfold )。
(3) 我嘗試按照網絡上的說明構建 RooUnfold 引用如下:

cd RooUnfold-master
mkdir build
cd build
cmake ..
make -j4
cd ..
source build/setup.sh

(4) 但是,當我使用以下輸出嘗試make -j4時失敗了:

$ cd RooUnfold-master 
$ mkdir build
$ cd build 
$ cmake ..
CMake Deprecation Warning at CMakeLists.txt:10 (cmake_minimum_required):
  Compatibility with CMake < 2.8.12 will be removed from a future version of
  CMake.

  Update the VERSION argument <min> value or use a ...<max> suffix to tell
  CMake that the project does not need compatibility with older versions.


Setup using plain ROOT
Doxygen build started
-- Configuring done
-- Generating done
-- Build files have been written to: /Users/XXXXXX/RooUnfold-master/build

$ make -j4
[  2%] Generating G__RooUnfold.cxx, libRooUnfold_rdict.pcm, libRooUnfold.rootmap
Scanning dependencies of target RooUnfold
[  9%] Building CXX object CMakeFiles/RooUnfold.dir/src/RooUnfoldBayes.o
[  9%] Building CXX object CMakeFiles/RooUnfold.dir/src/RooUnfold.o
[  9%] Building CXX object CMakeFiles/RooUnfold.dir/src/RooFitUnfold.o
[ 12%] Building CXX object CMakeFiles/RooUnfold.dir/src/RooUnfoldBinByBin.o
In file included from /Users/XXXXXX/RooUnfold-master/src/RooUnfoldBinByBin.cxx:8:
/Users/XXXXXX/RooUnfold-master/src/RooUnfoldBinByBin.h:44:3: warning: 'CheckTObjectHashConsistency' overrides a member function but is not marked 'override' [-Winconsistent-missing-override]
  ClassDefT (RooUnfoldBinByBinT, 1)  // Bin-by-bin unfolding
  ^
/opt/homebrew/Cellar/root/6.26.04_1/include/root/Rtypes.h:392:4: note: expanded from macro 'ClassDefT'
   _ClassDefOutline_(name,id,virtual,)              \
   ^
/opt/homebrew/Cellar/root/6.26.04_1/include/root/Rtypes.h:300:4: note: expanded from macro '_ClassDefOutline_'
   _ClassDefBase_(name,id, virtual_keyword, overrd)       \
   ^

(a lot of "override" errors)

97 warnings generated.
[ 63%] Linking CXX shared library libRooUnfold.dylib
[ 63%] Built target RooUnfold
[ 73%] Building CXX object CMakeFiles/RooUnfoldTest3D.dir/test/src/RooUnfoldTest3D.o
[ 73%] Building CXX object test/CMakeFiles/RooUnfoldTests.dir/src/generate_test.o
[ 73%] Building CXX object CMakeFiles/RooUnfoldTest2D.dir/test/src/RooUnfoldTest2D.o
[ 73%] Building CXX object CMakeFiles/RooUnfoldTest.dir/test/src/RooUnfoldTest.o
[ 75%] Building CXX object test/CMakeFiles/RooUnfoldTests.dir/src/response_test.o
[ 78%] Linking CXX executable RooUnfoldTest
ld: library not found for -lgcov
clang: error: linker command failed with exit code 1 (use -v to see invocation)
make[2]: *** [RooUnfoldTest] Error 1
make[1]: *** [CMakeFiles/RooUnfoldTest.dir/all] Error 2
make[1]: *** Waiting for unfinished jobs....
[ 80%] Building CXX object test/CMakeFiles/RooUnfoldTests.dir/src/bayes_test.o
[ 82%] Linking CXX executable RooUnfoldTest2D
ld: library not found for -lgcov
clang: error: linker command failed with exit code 1 (use -v to see invocation)
make[2]: *** [RooUnfoldTest2D] Error 1
make[1]: *** [CMakeFiles/RooUnfoldTest2D.dir/all] Error 2
[ 85%] Linking CXX executable RooUnfoldTest3D
[ 87%] Building CXX object test/CMakeFiles/RooUnfoldTests.dir/src/RooUnfold_unit_tests.o
ld: library not found for -lgcov
clang: error: linker command failed with exit code 1 (use -v to see invocation)
make[2]: *** [RooUnfoldTest3D] Error 1
make[1]: *** [CMakeFiles/RooUnfoldTest3D.dir/all] Error 2
In file included from /Users/XXXXXX/RooUnfold-master/test/src/bayes_test.cxx:13:
/Users/XXXXXX/RooUnfold-master/src/RooUnfoldBayes.h:45:17: warning: 'SetRegParm' overrides a member function but is not marked 'override' [-Winconsistent-missing-override]
  virtual void  SetRegParm (Double_t parm);
                ^
/Users/XXXXXX/RooUnfold-master/test/src/bayes_test.cxx:31:20: note: in instantiation of template class 'RooUnfoldBayesT<TH1, TH2>' requested here
    RooUnfoldBayes unfold(&response, h_meas, 4);
                   ^
/Users/XXXXXX/RooUnfold-master/src/RooUnfold.h:115:22: note: overridden virtual function is here
  virtual void       SetRegParm (Double_t parm);
                     ^
In file included from /Users/XXXXXX/RooUnfold-master/test/src/bayes_test.cxx:13:
/Users/XXXXXX/RooUnfold-master/src/RooUnfoldBayes.h:46:18: warning: 'GetRegParm' overrides a member function but is not marked 'override' [-Winconsistent-missing-override]
  virtual double GetRegParm() const;
                 ^
/Users/XXXXXX/RooUnfold-master/src/RooUnfold.h:116:22: note: overridden virtual function is here
  virtual Double_t   GetRegParm() const; // Get Regularisation Parameter
                     ^
In file included from /Users/XXXXXX/RooUnfold-master/test/src/bayes_test.cxx:13:
/Users/XXXXXX/RooUnfold-master/src/RooUnfoldBayes.h:47:16: warning: 'Reset' overrides a member function but is not marked 'override' [-Winconsistent-missing-override]
  virtual void Reset();
               ^
/Users/XXXXXX/RooUnfold-master/src/RooUnfold.h:74:16: note: overridden virtual function is here
  virtual void Reset ();
               ^
In file included from /Users/XXXXXX/RooUnfold-master/test/src/bayes_test.cxx:13:
/Users/XXXXXX/RooUnfold-master/src/RooUnfoldBayes.h:48:16: warning: 'Print' overrides a member function but is not marked 'override' [-Winconsistent-missing-override]
  virtual void Print (Option_t* option= "") const;
               ^
/Users/XXXXXX/RooUnfold-master/src/RooUnfold.h:129:8: note: overridden virtual function is here
  void Print(Option_t* opt="") const;
       ^
/Users/XXXXXX/RooUnfold-master/test/src/RooUnfold_unit_tests.cxx:29:62: warning: format specifies type 'unsigned int' but the argument has type 'std::vector<float>::size_type' (aka 'unsigned long') [-Wformat]
    check(n==r.size(), "error in bayes: %d bins is not %u",n,r.size());
                                                       ~~    ^~~~~~~~
                                                       %lu
/Users/XXXXXX/RooUnfold-master/test/src/dbg.h:30:18: note: expanded from macro 'check'
    log_err(M, ##__VA_ARGS__); errno=0; goto error; }
            ~    ^~~~~~~~~~~
/Users/XXXXXX/RooUnfold-master/test/src/dbg.h:20:26: note: expanded from macro 'log_err'
        clean_errno(), ##__VA_ARGS__)
                         ^~~~~~~~~~~
4 warnings generated.
1 warning generated.
[ 90%] Linking CXX static library libRooUnfoldTests.a
[ 90%] Built target RooUnfoldTests
make: *** [all] Error 2

(5) 我認為鏈接器錯誤,例如ld: library not found for -lgcov clang: error: linker command failed with exit code 1 (use -v to see invocation)是致命的,但我無法解決它們。

環境

  • Mac OS:蒙特雷版本。 12.3
  • 芯片:蘋果M1 Pro
  • 根:版本。 6.26
$ root --version
ROOT Version: 6.26/04
Built for macosxarm64 on Jun 07 2022, 16:01:16
From tags/v6-26-04@v6-26-04
  • gcc:版本。 13.1.6
$ gcc --version
Apple clang version 13.1.6 (clang-1316.0.21.2)
Target: arm64-apple-darwin21.4.0
Thread model: posix
InstalledDir: /Library/Developer/CommandLineTools/usr/bin
  • cmake:版本。 3.22.3
$ cmake --version
cmake version 3.22.3

CMake suite maintained and supported by Kitware (kitware.com/cmake).

我認為問題出在 CMakeLists.txt 文件中。 怎么連接。 你將如何做到這一點如下:

...
find_package(ROOT)
...
target_link_libraries(${ROOT_LIBRARIES})
...

我通過在https://gitlab.cern.ch/RooUnfold/RooUnfold/-/tree/CMakeLists-fix使用另一個 CMakeFile.txt 成功構建了 RooUnfold。
我還沒有完全理解其中的區別。
但是,對於想要使用 RooUnfold 的 Mac 用戶,最好不要從“master”安裝,而是從“CMakeLists-fix”安裝。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM