私は動的ライブラリを実行可能ファイルにリンクしようとしている小さなサンプルプロジェクトを手に入れました。RPakeがCMakeから作成されたMake Installで動作しない
ファイルの構造を次のように
-project
cmake_minimum_required (VERSION 3.3.2)
# Project
# --------------
project (cmakefun)
# Subdirectories
# --------------
add_subdirectory(dlibs)
add_subdirectory(exes)
# Target
# --------------
set(CMAKE_INSTALL_PREFIX "${PROJECT_SOURCE_DIR}/cmakefun")
--dlibs
---- engine.h
#pragma once
#include <iostream>
class Engine {
public:
Engine();
void Function();
};
を---- engine.cpp
#include "engine.h"
using namespace std;
Engine::Engine(){}
void Engine::Function() {
cout << "Function" << endl;
}
---- CMakeLists.txt
# Project
# --------------
project(engine)
# Headers and Sources
# --------------
set(${PROJECT_NAME}_headers engine.h)
set(${PROJECT_NAME}_sources engine.cpp)
# Create Binaries
# --------------
add_library (${PROJECT_NAME} SHARED ${${PROJECT_NAME}_headers} ${${PROJECT_NAME}_sources})
# Target
# --------------
install(TARGETS ${PROJECT_NAME}
RUNTIME DESTINATION bin
LIBRARY DESTINATION lib
ARCHIVE DESTINATION lib/static)
--exe
---- main.h
#pragma once
#include <iostream>
---- main.cppに
#include "main.h"
#include "../dlibs/engine.h"
int main(int argc, char* args[]) {
Engine a;
a.Function();
return 0;
}
---- CMakeLists.txt
# Project
# --------------
project(exe)
set(CMAKE_VERBOSE_MAKEFILE ON)
set(CMAKE_INSTALL_RPATH "${CMAKE_INSTALL_PREFIX}/lib")
set(CMAKE_INSTALL_RPATH_USE_LINK_PATH TRUE)
# Headers and Sources
# --------------
set(${PROJECT_NAME}_headers "")
set(${PROJECT_NAME}_sources main.cpp)
# Create Binaries
# --------------
add_executable (${PROJECT_NAME} ${${PROJECT_NAME}_headers} ${${PROJECT_NAME}_sources})
# Linker
# --------------
target_link_libraries(${PROJECT_NAME} engine)
# Target
# --------------
install(TARGETS ${PROJECT_NAME}
RUNTIME DESTINATION bin
LIBRARY DESTINATION lib
ARCHIVE DESTINATION lib/static)
は、これは私がそれを実行するために何をすべきかです:
mkdir build
cd build
cmake ..
make install
../cmakefun/bin/exe
私が取得エラー:
dyld: Library not loaded: @rpath/libengine.dylib
Referenced from: *absolute path*/cmakefun/bin/exe
Reason: image not found
Trace/BPT trap: 5
ビルドフォルダの内部に生成されたファイルは、しかし、動作します。しかし同じで、CMakteLists.txt(exeファイルのフォルダ)の内部
set(CMAKE_VERBOSE_MAKEFILE ON)
set(CMAKE_INSTALL_RPATH "${CMAKE_INSTALL_PREFIX}/lib")
set(CMAKE_INSTALL_RPATH_USE_LINK_PATH TRUE)
:私は「make installを」と私はこれを試してみた使用している場合は私の知る限りでは、私は相対RPATHを設定する必要があります結果。
私はRPathを設定するいくつかの方法を試しましたが、役に立たないものです。
ご協力いただきまして誠にありがとうございます。
よろしく