Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

O2 not compiling in Mac OS X #131

Closed
urasantonio opened this issue Jul 21, 2016 · 14 comments
Closed

O2 not compiling in Mac OS X #131

urasantonio opened this issue Jul 21, 2016 · 14 comments

Comments

@urasantonio
Copy link

Dear experts,

I'm trying to install ALICE O2 on Mac OS X 10.10 following what you suggest in the README.md (with some minor adaptations). After installing FairRoot and the external packages, the compilation of O2 fails with the error:

[ 14%] Linking CXX shared library ../../lib/libFLP2EPNex.so
ld: file not found: @rpath/libdds_intercom_lib.dylib for architecture x86_64
clang: error: linker command failed with exit code 1 (use -v to see invocation)
make[2]: *** [lib/libFLP2EPNex.0.0.0.so] Error 1
make[1]: *** [Examples/flp2epn/CMakeFiles/FLP2EPNex.dir/all] Error 2
make: *** [all] Error 2

Please note that the libdds_intercom_lib.dylib library is available under /DDS/lib but apparently it is not found during the compilation.

Any hint?

Thanks, Antonio

@rbx
Copy link
Contributor

rbx commented Jul 21, 2016

Hello,

was FairRoot compiled with DDS enabled?
If it was, then DDS is included as a dependency of FairRoot (FairMQ to be specific).
Was DDS found in your AliceO2 CMake run? If not, try providing a path to it like this:
cmake -DDDS_PATH="/home/username/DDS/0.11.27.g79f48d4/" .. (with a proper path)

It could also be that we are missing a check for the dependency in the example's CMakeLists.txt.
Can you please try to add the following lines in Examples/flp2epn/CMakeLists.txt after line 55:

if(DDS_FOUND)
  set(DEPENDENCIES
    ${DEPENDENCIES}
    ${DDS_INTERCOM_LIBRARY_SHARED}
    ${DDS_PROTOCOL_LIBRARY_SHARED}
    ${DDS_USER_DEFAULTS_LIBRARY_SHARED}
  )
endif()

If this solves the issue then I will update it in the dev branch.

@rbx
Copy link
Contributor

rbx commented Jul 22, 2016

I've tried to reproduce this on my machines.

When FairRoot is built without DDS, any configuration of AliceO2 on OSX/Linux compiles and runs.

When FairRoot is built with DDS, DDS is included as dependency of FairMQ. In this case on both Linux/OSX everything compiles. On Linux everything (executables using FairMQ) also runs properly. But on the OSX machine, the executables that depend on FairMQ fail by not finding the DDS library. Investigating with ldd/otool I can see that the Linux build includes DDS as a dependency only when it is actually used, but the OSX build includes DDS for all executables/libraries that use FairMQ.

Applying the above CMake modifications solves the runtime problem, but is probably not the best solution because it lists/includes unused dependencies (actually dependencies of a dependency) ... need to investigate why this is happening and how change it.

That said, I still cannot reproduce any compilation errors as the ones you described.

@urasantonio
Copy link
Author

urasantonio commented Jul 28, 2016

Hello Alexey,

the AliceO2 CMake actually finds DDS:

-- Looking for DDS ... found 
/Users/auras/alialfa/ExternalPackages/DDS/lib/libdds_intercom_lib.dylib;/Users/auras/alialfa/ExternalPackages/DDS/lib/libdds_protocol_lib.dylib;/Users/auras/alialfa/ExternalPackages/DDS/lib/libdds-user-defaults.dylib

After editing the Examples/flp2epn/CMakeLists.txt file, I still have
this error when making AliceO2:

[ 27%] Built target flpSyncSampler
[ 27%] Linking CXX shared library ../lib/libCCDB.so
ld: file not found: @rpath/libdds_intercom_lib.dylib for architecture x86_64
clang: error: linker command failed with exit code 1 (use -v to see
invocation)
make[2]: *** [lib/libCCDB.0.0.0.so] Error 1
make[1]: *** [CCDB/CMakeFiles/CCDB.dir/all] Error 2
make: *** [all] Error 2

Best regards,
Antonio

On 21/07/16 11:34, Alexey Rybalchenko wrote:

Hello,

was FairRoot compiled with DDS enabled?
If it was, then DDS is included as a dependency of FairRoot (FairMQ to
be specific).
Was DDS found in your AliceO2 CMake run? If not, try providing a path
to it like this:
|cmake -DDDS_PATH="/home/username/DDS/0.11.27.g79f48d4/" ..| (with a
proper path)

It could also be that we are missing a check for the dependency in the
example's CMakeLists.txt.
Can you please try to add the following lines in
|Examples/flp2epn/CMakeLists.txt| after line 55:

if(DDS_FOUND)
set(DEPENDENCIES
${DEPENDENCIES}
${DDS_INTERCOM_LIBRARY_SHARED}
${DDS_PROTOCOL_LIBRARY_SHARED}
${DDS_USER_DEFAULTS_LIBRARY_SHARED}
)
endif()

If this solves the issue then I will update it in the dev branch.


You are receiving this because you authored the thread.
Reply to this email directly, view it on GitHub
#131 (comment),
or mute the thread
https://github.com/notifications/unsubscribe-auth/ATny0gHFpGc-P66PgERd15dCcmpJBuncks5qXz0_gaJpZM4JRkKd.

Antonio Uras
Institut de Physique Nucléaire de Lyon
http://cern.ch/auras

@urasantonio
Copy link
Author

I'll try to build FairRoot without DDS: how shall I modify the cmake command in order to do it?

Thanks,
Antonio

@rbx
Copy link
Contributor

rbx commented Jul 29, 2016

Hello Antonio,

the libCCDB is hitting the same problem.
Please try the following:
After you run AliceO2 CMake, add the DDS lib location to you DYLD path like this:

export DYLD_LIBRARY_PATH=/Users/username/DDS/1.1.53.gff56723/lib/:$DYLD_LIBRARY_PATH

(replace username and DDS version according to what you have).

@urasantonio
Copy link
Author

Thanks Alexey,

as suggested, after the Alice O2 CMake I added
/Users/auras/alialfa/ExternalPackages/DDS/lib (the directory containing
the libdds_intercom_lib.dylib library) to DYLD_LIBRARY_PATH, but when
performing the make of Alice O2 I still have:

[ 27%] Linking CXX shared library ../lib/libCCDB.so
ld: file not found: @rpath/libdds_intercom_lib.dylib for architecture x86_64
clang: error: linker command failed with exit code 1 (use -v to see
invocation)
make[2]: *** [lib/libCCDB.0.0.0.so] Error 1
make[1]: *** [CCDB/CMakeFiles/CCDB.dir/all] Error 2
make: *** [all] Error 2

Any hint?

Thanks, cheers
Antonio

On 29/07/16 10:47, Alexey Rybalchenko wrote:

Hello Antonio,

the libCCDB is hitting the same problem.
Please try the following:
After you run AliceO2 CMake, add the DDS lib location to you DYLD path
like this:

export DYLD_LIBRARY_PATH=/Users/username/DDS/1.1.53.gff56723/lib/:$DYLD_LIBRARY_PATH

(replace username and DDS version according to what you have).


You are receiving this because you authored the thread.
Reply to this email directly, view it on GitHub
#131 (comment),
or mute the thread
https://github.com/notifications/unsubscribe-auth/ATny0iwz7k_N9BkEMNDuEWCNzVGD8hexks5qab4_gaJpZM4JRkKd.

Antonio Uras
Institut de Physique Nucléaire de Lyon
http://cern.ch/auras

@rbx
Copy link
Contributor

rbx commented Aug 4, 2016

Without being able to reproduce this it is hard to say what goes wrong, although it does sound like a linker configuration problem...
Could you mention which compiler you are using (output of clang --version)?

For now, to get your compilation done, you can do either of these three things:

  • Apply the same CMake fix that helped you get flp2epn example compiling to the other parts that use FairMQ - if I am not forgetting any, it should be CCDB/CMakeLists.txt, o2cdb/CMakeLists.txt, Utilities/QA/CMakeLists.txt. Put the if(DDS_FOUND)... block after the set(DEPENDENCIES...) command.
  • Compile FairRoot without DDS. For this, just rename the libdds_intercom_lib.dylib that you have to something else, like libdds_intercom_lib_BACKUP.dylib. And then, recompile FairRoot and AliceO2.
  • Try to use the new aliBuild approach to build the entire project.

I will update this issue when I can reproduce/fix this.

@urasantonio
Copy link
Author

Thanks Alexey. The output of clang --version is:

Apple LLVM version 7.0.2 (clang-700.1.81)
Target: x86_64-apple-darwin14.5.0
Thread model: posix

Concerning the three options you suggest... unfortunately, none of them
seems to work with me:

  1. The first option couldn't be applied since in the CMakeLists.txt
    files I don't find any block starting with "if(DDS_FOUND)". Is it normal?

  2. The second option gives me the following error when recompiling FairRoot:

[ 36%] Built target fairmq_logger
make[2]: *** No rule to make target
/Users/auras/alialfa/ExternalPackages/DDS/lib/libdds_intercom_lib.dylib', needed bylib/libFairMQ.16.06.00.so'. Stop.
make[1]: *** [fairmq/CMakeFiles/FairMQ.dir/all] Error 2
make: *** [all] Error 2

  1. The third option is the one I'm following in parallel (in an
    independent directory tree, to avoid conflicts) with the support of
    Giulio Eulisse and Dario Berzano: unfortunately, this method fails
    already in compiling FairRoot due a problem in the library
    libsodium.18.dylib.

Any (more) hint?

Thanks, cheers
Antonio

On 04/08/16 13:12, Alexey Rybalchenko wrote:

Without being able to reproduce this it is hard to say what goes
wrong, although it does sound like a linker configuration problem...
Could you mention which compiler you are using (output of |clang
--version|)?

For now, to get your compilation done, you can do either of these
three things:

  • Apply the same CMake fix that helpep you get flp2epn example
    compiling to the other parts that use FairMQ - if I am not
    forgetting any, it should be |CCDB/CMakeLists.txt|,
    |o2cdb/CMakeLists.txt|, |Utilities/QA/CMakeLists.txt|. Put the
    |if(DDS_FOUND)...| block after the |set(DEPENDENCIES...)| command.
  • Compile FairRoot without DDS. For this, just rename the
    libdds_intercom_lib.dylib that you have to something else, like
    libdds_intercom_lib_BACKUP.dylib. nd then, recompile FairRoot and
    AliceO2.
  • Try to use the new aliBuild approach to build the entire project.

I will update this issue when I can reproduce/fix this.


You are receiving this because you authored the thread.
Reply to this email directly, view it on GitHub
#131 (comment),
or mute the thread
https://github.com/notifications/unsubscribe-auth/ATny0klMYBetLY5VQ2Ca51dmBzaG_7Qnks5qcckmgaJpZM4JRkKd.

Antonio Uras
Institut de Physique Nucléaire de Lyon
http://cern.ch/auras

@rbx
Copy link
Contributor

rbx commented Aug 4, 2016

  1. That is correct, the if(DDS_FOUND) block is the one you are adding, see my first reply in this thread.

  2. Sounds like you need to clean the build directory, CMake still thinks that DDS is found from the previous time it ran (so it is still trying to build those with the DDS dependency).

Hope these help :)

@urasantonio
Copy link
Author

Sorry, I forgot that I had to create the if(DDS_FOUND) block :) Now the
AliceO2 compiling goes fine, thanks a lot!!

Cheers,
Antonio

On 04/08/16 16:36, Alexey Rybalchenko wrote:

  1. That is correct, the if(DDS_FOUND) block is the one you are adding,
    see my first reply in this thread.

  2. Sounds like you need to clean the build directory, CMake still
    thinks that DDS is found from the previous time it ran (so it is still
    trying to build those with the DDS dependency).

Hope these help :)


You are receiving this because you authored the thread.
Reply to this email directly, view it on GitHub
#131 (comment),
or mute the thread
https://github.com/notifications/unsubscribe-auth/ATny0vH90S4IeOtBGrovjHrZ1KzF8V_Lks5qcfj_gaJpZM4JRkKd.

Antonio Uras
Institut de Physique Nucléaire de Lyon
http://cern.ch/auras

@urasantonio
Copy link
Author

Dear experts,

I'm re-installing the whole FairSoft + AliceO2 package and I'm again in trouble with the same problem discussed in this thread. All went fine with the FairSoft installation, but when compiling AliceO2 I find:

auras@lyoalice07:~/alialfa/AliceO2/build_o2$ make
-- Looking for Root...
-- Looking for Root... - Found /Users/auras/alialfa/external/bin/root
-- Looking for Root... - Found version is 6.06/02
-- Looking for PYTHIA8 ...
-- Looking for PYTHIA8... - found /Users/auras/alialfa/external/lib
-- Looking for Pythia6...
-- Looking for Pythia6... - found /Users/auras/alialfa/external/lib
-- Looking for GEANT3...
-- Looking for GEANT3... - found /Users/auras/alialfa/external/lib64/libgeant321.dylib
-- Looking for GEANT4...
-- Looking for GEANT4... - found /Users/auras/alialfa/external/lib
-- Looking for GEANT4 DATA files...
-- Found G4EMLOW data
-- Found PhotonEvaporation data
-- Found G4NDL data
-- Found G4NEUTRONXS data
G4PIIDATA: /Users/auras/alialfa/external/share/Geant4-10.2.1/data/G4PII1.3
-- Found G4PII data
-- Found RadioactiveDecay data
-- Found RealSurface data
-- Found G4SAID data
-- Found G4ENSDFSTATE data
-- Looking for GEANT4VMC...
-- Looking for GEANT4VMC... - found /Users/auras/alialfa/external/lib
-- Looking for VGM...
-- Looking for VGM... - found /Users/auras/alialfa/external/lib
-- Looking for CLHEP...
-- Looking for CLHEP... - found /Users/auras/alialfa/external/lib
-- Looking for CERNLIB...
-- Looking for HepMC ...
-- Looking for HepMC... - found /Users/auras/alialfa/external/lib
-- Looking for IWYU...
-- Looking for IWYU... - Not found
-- Looking for DDS...
-- Looking for DDS ... found /Users/auras/alialfa/external/DDS/lib/libdds_intercom_lib.dylib;/Users/auras/alialfa/external/DDS/lib/libdds_protocol_lib.dylib;/Users/auras/alialfa/external/DDS/lib/libdds-user-defaults.dylib
-- Boost version: 1.60.0
-- Found the following Boost libraries:
-- thread
-- system
-- timer
-- program_options
-- random
-- filesystem
-- chrono
-- exception
-- regex
-- serialization
-- log
-- log_setup
-- unit_test_framework
-- date_time
-- atomic
-- Looking for ZeroMQ...
-- Looking for ZeroMQ... - found /Users/auras/alialfa/external/lib64/libzmq.a;/Users/auras/alialfa/external/lib64/libzmq.dylib 4.1.3
-- Setting FairRoot environment…
-- FairRoot ... - found /Users/auras/alialfa/external/FairRoot
-- FairRoot Library directory : /Users/auras/alialfa/external/FairRoot/lib
-- FairRoot Include path… : /Users/auras/alialfa/external/FairRoot/include
-- FairRoot Cmake Modules : /Users/auras/alialfa/external/FairRoot/share/fairbase/cmake
-- FairRoot ... - found /Users/auras/alialfa/external/FairRoot
-- Looking for FairMQ functionality in FairRoot ...
-- Looking for FairMQ functionality in FairRoot: yes
-- Set BuildType DEBUG
-- fairsoft-config found
-- C compiler used for FairSoft installation: /usr/bin/gcc
-- C compiler used now: /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/clang
-- CXX compiler used for FairSoft installation: /usr/bin/g++
-- CXX compiler used now: /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/clang
-- The compiler during the compilation of FairSoft is different from the current one.
-- The error was silenced by the usage of -DUSE_DIFFERENT_COMPILER=TRUE
--- Found a Mac OS X System 10.10
--- Found GNU compiler collection
Fortran libraries found in /usr/local/gfortran/lib/gcc/x86_64-apple-darwin14/4.9.1/../../..
--- Build Type: Debug
--- Compiler Flags: -std=c++11 -std=c++11 -stdlib=libc++
-- Generate test testExampleModule1
running /bin/chmod u+x /Users/auras/alialfa/AliceO2/build_o2/macro/run_sim.sh 2>&1
running /bin/chmod u+x /Users/auras/alialfa/AliceO2/build_o2/macro/run_digi.sh 2>&1
running /bin/chmod u+x /Users/auras/alialfa/AliceO2/build_o2/macro/run_clusterer.sh 2>&1
running /bin/chmod u+x /Users/auras/alialfa/AliceO2/build_o2/macro/load_all_libs.sh 2>&1
-- Configuring done
-- Generating done
-- Build files have been written to: /Users/auras/alialfa/AliceO2/build_o2
-- Found Git: /usr/bin/git (found version "2.5.4 (Apple Git-61)")
fatal: No names found, cannot describe anything.
-- FairRoot Version - from - Mon Oct 3 18:26:34 2016 +0200
[ 0%] Built target svnheader
[ 1%] Linking CXX shared library ../../lib/libSimulationDataFormat.dylib
ld: file not found: @rpath/libdds_intercom_lib.dylib for architecture x86_64
clang: error: linker command failed with exit code 1 (use -v to see invocation)
make[2]: *** [lib/libSimulationDataFormat.dylib] Error 1
make[1]: *** [DataFormats/simulation/CMakeFiles/SimulationDataFormat.dir/all] Error 2
make: *** [all] Error 2

I tried to apply the same recipe as before (adding the if(DDS_FOUND) block to the CMakeLists.txt files) but it seems it doesn't work anymore. By the way, have the CMakeLists.txt files been modified w.r.t. what I found in July? For instance, I don't find at all the o2cdb/CMakeLists.txt file...

Thanks, cheers
Antonio

@rbx
Copy link
Contributor

rbx commented Oct 7, 2016

Dear Antonio,

indeed there have been some changes in the build system and now dependencies are handled via a "bucket" system.

I am working on a way to completely solve the linking issue that you are seeing.

Until then, please try the following workaround for your build. In the file cmake/O2Dependencies.cmake add following two lines (marked with comments) here (starts on line 197):

o2_define_bucket(
    NAME
    fairroot_base_bucket

    DEPENDENCIES
    root_base_bucket
    Base FairMQ FairTools ${Boost_LOG_LIBRARY} fairmq_logger Base
    common_boost_bucket
    ${Boost_THREAD_LIBRARY} pthread
    ${OPTIONAL_DDS_LIBRARIES} # <-------- this line 

    INCLUDE_DIRECTORIES
    ${FAIRROOT_INCLUDE_DIR}
    ${OPTIONAL_DDS_INCLUDE_DIR} # <-------- and this line
)

@urasantonio
Copy link
Author

Hi Alexey,

Has the issue been fixed in the meanwhile?

Thanks, cheers
Antonio

@rbx
Copy link
Contributor

rbx commented Dec 13, 2016

Hi Antonio,

yes, it is now fixed. Please try the newest dev branches of FairRoot/AliceO2.

With the new version, the control & config via DDS is handled by a plugin mechanism, thus the FairMQ and user devices don't need direct dependency on DDS (unless they use it for something other than what the plugin provides).

mikesas pushed a commit to mikesas/AliceO2 that referenced this issue Dec 13, 2022
* Small fix in the CosTheta range

* Adding code to read CCDB

Co-authored-by: Luca Micheletti <lmichele@alicecerno2.cern.ch>
Co-authored-by: Ionut Cristian Arsene <Ionut.Cristian.Arsene@cern.ch>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Development

No branches or pull requests

3 participants