问题
I recently upgraded a library I use in a project of mine (glfw-devel) with macports and now my executable is dynamically link with lib/libglfw.3.dylib
instead of opt/local/lib/libglfw.3.dylib
which is the actual location of the lib so I get a dyld: Library not loaded
error.
I know how to fix this with install-names
or with a simple copy. What I cannot understand, however, is why this happens suddenly after a simple upgrade. I haven't changed anything in my CMakeLists.txt
(the most relevant part is below) and all the other libraries I use have correct paths. Note that there is no place in the file where I refer to lib/
.
Could it be a macports related issue? How can I make sure that my future binaries will be compiled with the proper paths?
set(CMAKE_CXX_COMPILER clang++)
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wall -std=c++14 -stdlib=libc++ -DBOOST_LOG_USE_NATIVE_SYSLOG")
set (SOURCES src/helper.cpp
src/capture.cpp
src/imageBuffer.cpp
src/projection.cpp
)
set (APP_SOURCES src/main.cpp )
set (TEST_SOURCES src/tests.cpp
lib/gmock-all.cc
lib/gtest-all.cc)
include_directories(/opt/local/include
/usr/local/include
/usr/local/include/gmock
/usr/local/include/gtest
src
)
set (DYN_LINK /opt/local/lib
/usr/local/lib)
set (STATIC_LINK static)
set(CMAKE_INSTALL_PREFIX "${CMAKE_BINARY_DIR}/Install")
set(CMAKE_RUNTIME_OUTPUT_DIRECTORY "${CMAKE_BINARY_DIR}/Install")
find_package(Boost 1.59.0 COMPONENTS
log
log_setup
thread
date_time
filesystem
system
program_options
REQUIRED)
find_package(OpenCV 3.0 REQUIRED)
if (OpenCV_FOUND)
message( "-- OpenCV found")
endif()
find_package(OpenGL REQUIRED)
if (OpenGL_FOUND)
message( "-- OpenGL found")
endif()
include_directories(${Boost_INCLUDE_DIRS})
include_directories(${OpenCV_INCLUDE_DIRS})
#user configuration
if(${CMAKE_LINKAGE} MATCHES Static)
message("-- STATIC LINKAGE SELECTED")
link_directories(${STATIC_LINK})
set(Boost_USE_STATIC_LIBS ON)
set(Boost_USE_STATIC_RUNTIME OFF)
set(CMAKE_FIND_LIBRARY_SUFFIXES ".a")
set(BUILD_SHARED_LIBRARIES OFF)
else()
message("-- DYNAMIC LINKAGE SELECTED")
#find libraries
link_directories(${DYN_LINK})
link_directories(${Boost_LIBRARY_DIR})
link_directories(${Boost_LIBRARY_DIR})
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -DBOOST_ALL_DYN_LINK")
set(Boost_USE_STATIC_LIBS OFF)
endif()
if(${CMAKE_BUILD_MODE} MATCHES Release)
message("-- RELEASE MODE ON")
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -O3")
else()
message("-- DEBUG MODE ON")
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -g -DDEBUG")
endif()
# core
add_library(core ${SOURCES})
target_link_libraries(core ${OpenCV_LIBS})
target_link_libraries(core ${Boost_LIBRARIES})
target_link_libraries(core ${OPENGL_LIBRARIES})
target_link_libraries(core GLEW)
target_link_libraries(core glfw)
回答1:
I encountered the same problem. And It took me hours to figure it out. It turned out that this problem is glfw version concerned. glfw version 3.1 is ok. Try it.
Or the bug had been posted in Macports buglist: glfw @3.2: install_name is not set properly
来源:https://stackoverflow.com/questions/35324332/macports-cmake-make-and-dyld-library-not-loaded