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.zip
https://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)