Error compiling code with new arch arm64

Dear ROOT expert,

I hope I’m posting in the right place.

I’m working with this setup [1] and when I tried to compile a piece of code I got this error [2].
The compilation broke with this [3] architecture, while it works fine with this one [4] and this root version [5]. I installed root via macport and I checked (to the best of my knowledge) that everything was up-to-date.
My understanding of the problem is that macport installed the root version for the wrong architecture, but I’m not sure how to fix this.

I think that the problem is not really related to the code I’m trying to compile, but if you think it’s needed I could try to wrap it up.

Thank you in advance for your help,
Andrea

[1]

------------------------------------------------------------------
  | Welcome to ROOT 6.28/04                        https://root.cern |
  | (c) 1995-2022, The ROOT Team; conception: R. Brun, F. Rademakers |
  | Built for macosx64 on May 09 2023, 14:14:00                      |
  | From tag , 8 May 2023                                            |
  | With Apple clang version 14.0.0 (clang-1400.0.29.202)            |
  | Try '.help'/'.?', '.demo', '.license', '.credits', '.quit'/'.q'  |
   ------------------------------------------------------------------

[2]

ld: warning: ignoring file /opt/local/libexec/root6/lib/root/libCore.so, building for macOS-arm64 but attempting to link with file built for macOS-x86_64
ld: warning: ignoring file /opt/local/libexec/root6/lib/root/libImt.so, building for macOS-arm64 but attempting to link with file built for macOS-x86_64
ld: warning: ignoring file /opt/local/libexec/root6/lib/root/libHist.so, building for macOS-arm64 but attempting to link with file built for macOS-x86_64
ld: warning: ignoring file /opt/local/libexec/root6/lib/root/libNet.so, building for macOS-arm64 but attempting to link with file built for macOS-x86_64
ld: warning: ignoring file /opt/local/libexec/root6/lib/root/libGraf.so, building for macOS-arm64 but attempting to link with file built for macOS-x86_64
ld: warning: ignoring file /opt/local/libexec/root6/lib/root/libRIO.so, building for macOS-arm64 but attempting to link with file built for macOS-x86_64
ld: warning: ignoring file /opt/local/libexec/root6/lib/root/libGpad.so, building for macOS-arm64 but attempting to link with file built for macOS-x86_64
ld: warning: ignoring file /opt/local/libexec/root6/lib/root/libGraf3d.so, building for macOS-arm64 but attempting to link with file built for macOS-x86_64
ld: warning: ignoring file /opt/local/libexec/root6/lib/root/libPostscript.so, building for macOS-arm64 but attempting to link with file built for macOS-x86_64
ld: warning: ignoring file /opt/local/libexec/root6/lib/root/libTreePlayer.so, building for macOS-arm64 but attempting to link with file built for macOS-x86_64
ld: warning: ignoring file /opt/local/libexec/root6/lib/root/libTree.so, building for macOS-arm64 but attempting to link with file built for macOS-x86_64
ld: warning: ignoring file /opt/local/libexec/root6/lib/root/libROOTVecOps.so, building for macOS-arm64 but attempting to link with file built for macOS-x86_64
ld: warning: ignoring file /opt/local/libexec/root6/lib/root/libMatrix.so, building for macOS-arm64 but attempting to link with file built for macOS-x86_64
ld: warning: ignoring file /opt/local/libexec/root6/lib/root/libPhysics.so, building for macOS-arm64 but attempting to link with file built for macOS-x86_64
ld: warning: ignoring file /opt/local/libexec/root6/lib/root/libRint.so, building for macOS-arm64 but attempting to link with file built for macOS-x86_64
ld: warning: ignoring file /opt/local/libexec/root6/lib/root/libMultiProc.so, building for macOS-arm64 but attempting to link with file built for macOS-x86_64
ld: warning: ignoring file /opt/local/libexec/root6/lib/root/libMathCore.so, building for macOS-arm64 but attempting to link with file built for macOS-x86_64
ld: warning: ignoring file /opt/local/libexec/root6/lib/root/libThread.so, building for macOS-arm64 but attempting to link with file built for macOS-x86_64
ld: warning: ignoring file /opt/local/libexec/root6/lib/root/libROOTDataFrame.so, building for macOS-arm64 but attempting to link with file built for macOS-x86_64
Undefined symbols for architecture arm64:
  "TVersionCheck::TVersionCheck(int)", referenced from:
      __GLOBAL__sub_I_SimpleJetCorrector.cc in SimpleJetCorrector.o
      __GLOBAL__sub_I_FactorizedJetCorrectorCalculator.cc in FactorizedJetCorrectorCalculator.o
      __GLOBAL__sub_I_FactorizedJetCorrector.cc in FactorizedJetCorrector.o
      __GLOBAL__sub_I_JetMETObjects_dict.cc in JetMETObjects_dict.o
  "ROOT::TGenericClassInfo::SetNewArray(void* (*)(long, void*))", referenced from:
      ROOT::GenerateInitInstanceLocal(JetCorrectorParameters const*) in JetMETObjects_dict.o
      ROOT::GenerateInitInstanceLocal(SimpleJetCorrector const*) in JetMETObjects_dict.o
      ROOT::GenerateInitInstanceLocal(FactorizedJetCorrector const*) in JetMETObjects_dict.o
  "ROOT::TGenericClassInfo::SetDestructor(void (*)(void*))", referenced from:
      ROOT::GenerateInitInstanceLocal(JetCorrectorParameters const*) in JetMETObjects_dict.o
      ROOT::GenerateInitInstanceLocal(SimpleJetCorrector const*) in JetMETObjects_dict.o
      ROOT::GenerateInitInstanceLocal(FactorizedJetCorrector const*) in JetMETObjects_dict.o
  "ROOT::TGenericClassInfo::SetDeleteArray(void (*)(void*))", referenced from:
      ROOT::GenerateInitInstanceLocal(JetCorrectorParameters const*) in JetMETObjects_dict.o
      ROOT::GenerateInitInstanceLocal(SimpleJetCorrector const*) in JetMETObjects_dict.o
      ROOT::GenerateInitInstanceLocal(FactorizedJetCorrector const*) in JetMETObjects_dict.o
  "ROOT::TGenericClassInfo::SetNew(void* (*)(void*))", referenced from:
      ROOT::GenerateInitInstanceLocal(JetCorrectorParameters const*) in JetMETObjects_dict.o
      ROOT::GenerateInitInstanceLocal(SimpleJetCorrector const*) in JetMETObjects_dict.o
      ROOT::GenerateInitInstanceLocal(FactorizedJetCorrector const*) in JetMETObjects_dict.o
  "ROOT::TGenericClassInfo::GetClass()", referenced from:
      ROOT::JetCorrectorParameters_Dictionary() in JetMETObjects_dict.o
      ROOT::SimpleJetCorrector_Dictionary() in JetMETObjects_dict.o
      ROOT::FactorizedJetCorrector_Dictionary() in JetMETObjects_dict.o
  "ROOT::TGenericClassInfo::SetDelete(void (*)(void*))", referenced from:
      ROOT::GenerateInitInstanceLocal(JetCorrectorParameters const*) in JetMETObjects_dict.o
      ROOT::GenerateInitInstanceLocal(SimpleJetCorrector const*) in JetMETObjects_dict.o
      ROOT::GenerateInitInstanceLocal(FactorizedJetCorrector const*) in JetMETObjects_dict.o
  "ROOT::TGenericClassInfo::TGenericClassInfo(char const*, char const*, int, std::type_info const&, ROOT::Internal::TInitBehavior const*, TClass* (*)(), TVirtualIsAProxy*, int, int)", referenced from:
      ROOT::GenerateInitInstanceLocal(JetCorrectorParameters const*) in JetMETObjects_dict.o
      ROOT::GenerateInitInstanceLocal(SimpleJetCorrector const*) in JetMETObjects_dict.o
      ROOT::GenerateInitInstanceLocal(FactorizedJetCorrector const*) in JetMETObjects_dict.o
  "ROOT::TGenericClassInfo::~TGenericClassInfo()", referenced from:
      ROOT::GenerateInitInstanceLocal(JetCorrectorParameters const*) in JetMETObjects_dict.o
      ROOT::GenerateInitInstanceLocal(SimpleJetCorrector const*) in JetMETObjects_dict.o
      ROOT::GenerateInitInstanceLocal(FactorizedJetCorrector const*) in JetMETObjects_dict.o
  "ROOT::Internal::DefineBehavior(void*, void*)", referenced from:
      ROOT::GenerateInitInstanceLocal(JetCorrectorParameters const*) in JetMETObjects_dict.o
      ROOT::GenerateInitInstanceLocal(SimpleJetCorrector const*) in JetMETObjects_dict.o
      ROOT::GenerateInitInstanceLocal(FactorizedJetCorrector const*) in JetMETObjects_dict.o
  "TROOT::RegisterModule(char const*, char const**, char const**, char const*, char const*, void (*)(), std::__1::vector<std::__1::pair<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char>>, int>, std::__1::allocator<std::__1::pair<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char>>, int>>> const&, char const**, bool)", referenced from:
      (anonymous namespace)::TriggerDictionaryInitialization_JetMETObjects_dict_Impl() in JetMETObjects_dict.o
  "TFormula::SetParameter(int, double)", referenced from:
      SimpleJetCorrector::correctionBin(unsigned int, std::__1::vector<float, std::__1::allocator<float>> const&) const in SimpleJetCorrector.o
  "TFormula::TFormula(char const*, char const*, bool, bool)", referenced from:
      SimpleJetCorrector::SimpleJetCorrector(std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char>> const&, std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char>> const&) in SimpleJetCorrector.o
      SimpleJetCorrector::SimpleJetCorrector(JetCorrectorParameters const&) in SimpleJetCorrector.o
  "TFormula::TFormula(TFormula const&)", referenced from:
      SimpleJetCorrector::correctionBin(unsigned int, std::__1::vector<float, std::__1::allocator<float>> const&) const in SimpleJetCorrector.o
  "TFormula::TFormula()", referenced from:
      SimpleJetCorrector::SimpleJetCorrector() in SimpleJetCorrector.o
      SimpleJetCorrector::SimpleJetCorrector() in SimpleJetCorrector.o
  "TFormula::~TFormula()", referenced from:
      SimpleJetCorrector::SimpleJetCorrector(std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char>> const&, std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char>> const&) in SimpleJetCorrector.o
      SimpleJetCorrector::SimpleJetCorrector(JetCorrectorParameters const&) in SimpleJetCorrector.o
      SimpleJetCorrector::~SimpleJetCorrector() in SimpleJetCorrector.o
      SimpleJetCorrector::correctionBin(unsigned int, std::__1::vector<float, std::__1::allocator<float>> const&) const in SimpleJetCorrector.o
  "TIsAProxy::TIsAProxy(std::type_info const&)", referenced from:
      ROOT::GenerateInitInstanceLocal(JetCorrectorParameters const*) in JetMETObjects_dict.o
      ROOT::GenerateInitInstanceLocal(SimpleJetCorrector const*) in JetMETObjects_dict.o
      ROOT::GenerateInitInstanceLocal(FactorizedJetCorrector const*) in JetMETObjects_dict.o
  "TFormula::Eval(double, double, double, double) const", referenced from:
      SimpleJetCorrector::correctionBin(unsigned int, std::__1::vector<float, std::__1::allocator<float>> const&) const in SimpleJetCorrector.o
      SimpleJetCorrector::invert(std::__1::vector<float, std::__1::allocator<float>> const&, TFormula&) const in SimpleJetCorrector.o
  "TVector3::PseudoRapidity() const", referenced from:
      FactorizedJetCorrectorCalculator::VariableValues::setJPTrawP4(TLorentzVector const&) in FactorizedJetCorrectorCalculator.o
  "TVector3::Perp() const", referenced from:
      FactorizedJetCorrectorCalculator::VariableValues::setJPTrawP4(TLorentzVector const&) in FactorizedJetCorrectorCalculator.o
ld: symbol(s) not found for architecture arm64
clang: error: linker command failed with exit code 1 (use -v to see invocation)
make: *** [lib] Error 1

[3] Darwin Kernel Version 22.4.0; root:xnu-8796.101.5~3/RELEASE_ARM64_T8103 arm64
[4] Darwin Kernel Version 22.5.0; root:xnu-8796.121.3~7/RELEASE_X86_64 x86_64

[5]

 ------------------------------------------------------------------
 | Welcome to ROOT 6.28/00                        https://root.cern |
 | (c) 1995-2022, The ROOT Team; conception: R. Brun, F. Rademakers |
 | Built for macosx64 on Feb 07 2023, 11:33:00                      |
 | From tag , 3 February 2023                                       |
 | With Apple clang version 14.0.0 (clang-1400.0.29.202)            |
 | Try '.help'/'.?', '.demo', '.license', '.credits', '.quit'/'.q'  |
  ------------------------------------------------------------------

The Apple silicon chip can run both x64 and arm64 binary (and thus libraries) but can not mix and match them. In practice since MacPort download the x64 version of fo v6.28/04, you would need to also build your software in that mode. The best solution, however, is to reached out to MacPort support to figure out how to download the arm64 version.

1 Like

This topic was automatically closed 14 days after the last reply. New replies are no longer allowed.