dyld: Library not loaded
In MacOS, When compiling the external library, that library is set LC_ID_DYLIB name. You can check that name using
otool -l libxxxxx.dylib_or_so | grep -A 2 LC_ID_DYLIB
otool -l libNKFADC500ROOT.so | grep -A 2 LC_ID_DYLIB
cmd LC_ID_DYLIB
cmdsize 72
name /usr/local/notice/src/nkfadc500_root_v6/nkfadc500root/ (offset 24) #wrong name
If the name is wrong, MacOS cannot find the shared library.
You must change the shared library link if you canโt recompile the library.
Transclude of notice_macos.ziphttps://stackoverflow.com/questions/17703510/dyld-library-not-loaded-reason-image-not-found
otool -L your_excute_file_name
otool -L nkfadc500_test
@rpath/libCore.so (compatibility version 0.0.0, current version 0.0.0)
@rpath/libImt.so (compatibility version 0.0.0, current version 0.0.0)
@rpath/libRIO.so (compatibility version 0.0.0, current version 0.0.0)
@rpath/libNet.so (compatibility version 0.0.0, current version 0.0.0)
@rpath/libHist.so (compatibility version 0.0.0, current version 0.0.0)
@rpath/libGraf.so (compatibility version 0.0.0, current version 0.0.0)
@rpath/libGraf3d.so (compatibility version 0.0.0, current version 0.0.0)
@rpath/libGpad.so (compatibility version 0.0.0, current version 0.0.0)
@rpath/libROOTDataFrame.so (compatibility version 0.0.0, current version 0.0.0)
@rpath/libTree.so (compatibility version 0.0.0, current version 0.0.0)
@rpath/libTreePlayer.so (compatibility version 0.0.0, current version 0.0.0)
@rpath/libRint.so (compatibility version 0.0.0, current version 0.0.0)
@rpath/libPostscript.so (compatibility version 0.0.0, current version 0.0.0)
@rpath/libMatrix.so (compatibility version 0.0.0, current version 0.0.0)
@rpath/libPhysics.so (compatibility version 0.0.0, current version 0.0.0)
@rpath/libMathCore.so (compatibility version 0.0.0, current version 0.0.0)
@rpath/libThread.so (compatibility version 0.0.0, current version 0.0.0)
@rpath/libMultiProc.so (compatibility version 0.0.0, current version 0.0.0)
@rpath/libROOTVecOps.so (compatibility version 0.0.0, current version 0.0.0)
@rpath/libRooStats.so (compatibility version 0.0.0, current version 0.0.0)
**/usr/local/notice/src/nkfadc500_root_v6/nkfadc500root/ (compatibility version 0.0.0, current version 0.0.0)
**/usr/local/notice/src/usb3com/usb3comroot/ (compatibility version 0.0.0, current version 0.0.0)
Find your external library, and change to exact path and filename.
install_name_tool -change old new your_excuge_file_name
install_name_tool -change /usr/local/notice/src/nkfadc500_root_v6/nkfadc500root/ /usr/local/notice/lib/libNoticeNKFADC500ROOT.so nkfadc500_test
install_name_tool -change /usr/local/notice/src/usb3com/usb3comroot/ /usr/local/notice/lib/libusb3comroot.so nkfadc500_test
If you can recompile the library, using LDFLAG(ld option) -install_name /path/to/install/lib/libfilename.dylib_or_so
"MakeFile"
...
LDFLAGS = $(SOFLAGS) `root-config --glibs` -install_name ${INSTALL_LIB}/libNoticeNKFADC500ROOT.so
...
After recompiling, you can check the right name
otool -l libNKFADC500ROOT.so | grep -A 2 LC_ID_DYLIB
cmd LC_ID_DYLIB
cmdsize 72
name /usr/local/notice/lib/libNoticeNKFADC500ROOT.so (offset 24)
CMakeList.txt file for NKFADC500
"CMakeLists.txt" 60L, 1977B
#----------------------------------------------------------------------------
# Setup the project
cmake_minimum_required(VERSION 3.19 FATAL_ERROR)
project(nkfadc500_test)
set(CMAKE_MACOSX_RPATH OFF)
#----------------------------------------------------------------------------
# Configuring ROOT
# You need to tell CMake where to find the ROOT installation. This can be done in a number of ways:
# - ROOT built with classic configure/make use the provided $ROOTSYS/etc/cmake/FindROOT.cmake
# - ROOT built with CMake. Add in CMAKE_PREFIX_PATH the installation prefix for ROOT
list(APPEND CMAKE_PREFIX_PATH $ENV{ROOTSYS})
find_package (ROOT REQUIRED COMPONENTS RIO Net RooStats)
#----------------------------------------------------------------------------
# Locate sources and headers for this project
# NB: headers are included so they will show up in IDEs
#
file(GLOB NOTICE_LIB /usr/local/notice/lib/libusb3comroot.so /usr/local/notice/lib/libNoticeNKFADC500ROOT.so)
#file(GLOB NOTICE_LIB /usr/local/lib/libusb3comroot.so /usr/local/lib/libNoticeNKFADC500ROOT.so)
#file(GLOB NOTICE_LIB /usr/local/notice/lib/*.so)
file(GLOB NOTICE_INC /usr/local/notice/include/*.h)
#file(GLOB NOTICE_INC /usr/local/include/*.h)
include_directories(${NOTICE_LIB} ${NOTICE_INC})
message("NOTICE LIB : ${NOTICE_LIB}")
message("NOTICE INC : ${NOTICE_INC}")
#----------------------------------------------------------------------------
add_executable(nkfadc500_test nkfadc500_test.cxx)
target_link_libraries(nkfadc500_test
${ROOT_LIBRARIES}
ROOT::RIO
ROOT::Net
${NOTICE_LIB}
#usb3comroot
#NoticeNKFADC500ROOT
)
message("ROOT LIB : ${ROOT_LIBRARIES}")
target_include_directories(nkfadc500_test PUBLIC
${ROOT_INCLUDE_DIRS}
${NOTICE_INC}
/usr/local/notice/include
/usr/local/notice/lib
)
target_compile_options(nkfadc500_test PUBLIC -o -fdiagnostics-color=always)
set(SCRIPTS
)
install(TARGETS nkfadc500_test DESTINATION bin)