Вот моя структура проекта:
➜ helloWorld ls
[18/11/29|11:19AM]
CMakeLists.txt cmake-build-debug main.cpp third_parties
➜ helloWorld
➜ helloWorld ls third_parties/say
[18/11/29|11:19AM]
compilesaylib.sh libsaylib.dylib saylib.cpp saylib.h
➜ helloWorld
CMakeLists.txt выглядит следующим образом:
cmake_minimum_required(VERSION 3.12)
cmake_policy(SET CMP0015 NEW)
SET(CMAKE_SYSTEM_NAME Darwin)
project (myproject)
include_directories(${CMAKE_SOURCE_DIR}/third_parties/say)
file(GLOB LIBRARIES "third_parties/say/*.dylib")
message("LIBRARIES = ${LIBRARIES}")
add_executable(myproject main.cpp)
target_link_libraries(myproject ${LIBRARIES})
main.cpp:
#include <iostream>
#include "saylib.h"
int main() {
say("Hi there!");
return 0;
}
Я получаю следующую ошибку:
➜ cmake-build-debug ./helloWorld
[18/11/29|10:56AM]
dyld: Library not loaded: libsaylib.dylib
Referenced from: /Users/oleg/CLionProjects/helloWorld/cmake-build-debug/./helloWorld
Reason: image not found
[1] 17995 abort ./helloWorld
➜ cmake-build-debug
Когда я использую otool на исполняемом файле, я получаю следующее:
➜ cmake-build-debug otool -L helloWorld
[18/11/29|10:56AM]
helloWorld:
libsaylib.dylib (compatibility version 0.0.0, current version 0.0.0)
/usr/lib/libc++.1.dylib (compatibility version 1.0.0, current version 400.9.4)
/usr/lib/libSystem.B.dylib (compatibility version 1.0.0, current version 1252.200.5)
➜ cmake-build-debug
Чтобы решить эту проблему, мне нужно сделать одно из двухвещи:
- установить DYLD_LIBRARY_PATH, чтобы он указывал на мою библиотеку
- скопировать мою библиотеку в исполняемый каталог
Есть ли другие варианты?Есть ли способ установить этот путь через cmake для запуска исполняемого файла без этой ошибки?
Может быть, я могу как-то установить не просто имя библиотеки libsaylib.dylib в качестве зависимости от исполняемого файла, но с абсолютным путем, как для /usr/lib/libc++.1.dylib, используя cmake и $ CMAKE_CURRENT_SOURCE_DIR?