cmake-是否可以在运行时将可执行文件链接到具有相对路径的共享库?

马斯·巴格尔(Mas Bagol)

可以说我有这个:

../project_dir
    main.cpp
    mylib.cpp
    mylib.h

构建步骤将是:

g++ -c mylib.cpp -o mylib.o
g++ -shared -o libmylib.so mylib.o
g++ -L$(pwd) -Wl,-rpath='$ORIGIN' -o exec main.cpp -lmylib

exec将是我的二进制可执行文件输出。当我测试时:

ldd exec

输出行是:

libmylib.so => /full/path/to/build/directory/libmylib.so (0x00007f75fdd1f000)

该输出线是我的问题,是否有可能得到:

libmylib.so => ./libmylib.so

因此,每当我移动可执行文件时,便可以随同移动共享库。如果可能,如何用cmake做到这一点?

k

当您启动ldd以检查您的应用程序共享库依赖关系时,它始终会打印绝对路径。但是,如果您将-rpathoprtion与$ORIGIN变量一起使用,那么一切都会按预期工作。您可以移动可执行文件和共享库,删除原始构建目录,仍然可以启动您的应用程序。

这是使用cmake以下方法的方法

project(myapp)
cmake_minimum_required(VERSION 2.8)

set(APP_SRC main.cpp)
set(LIB_SRC mylib.cpp)

link_directories(${CMAKE_CURRENT_BINARY_DIR})

SET(CMAKE_EXE_LINKER_FLAGS
          "${CMAKE_EXE_LINKER_FLAGS} -Wl,-rpath -Wl,$ORIGIN")

add_library(mylib SHARED ${LIB_SRC})

add_executable(${PROJECT_NAME} ${APP_SRC})

target_link_libraries(${PROJECT_NAME} mylib)

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

在将共享库层次结构链接到可执行文件时,cmake链接错误

使用 CMAKE 将共享库链接到可执行文件

cmake,无法运行与预编译共享库链接的可执行文件

将可执行文件链接到第三方依赖的共享库时的C ++ CMake未定义引用

具有多个可执行文件的CMake共享库

CMake:从ExternalProject链接共享的C ++对象会生成具有相对路径的二进制文件,而不是绝对路径

CMake没有创建可访问我的共享库的可执行文件

CMake:是否可以仅从静态库而不从源构建可执行文件?

如何使用相对路径将共享库与CMake链接

CMake:将不同的OpenCV库链接到同一项目的不同可执行文件

从相同的源代码创建单独的目标文件,并使用CMake链接到可执行文件

CMAKE:错误的链接器(g ++)用于可执行文件到CUDA库的链接

CMAKE:错误的链接器(g ++)用于可执行文件到CUDA库的链接

使用CMake链接到OSX下的可执行文件

CMake添加和删除宏定义以编译共享库/可执行文件

Cmake:加载可执行文件时,动态链接器如何查找动态库?

CMake无法链接可执行文件-ljsoncpp:没有这样的文件

在带有符号链接的可执行文件中使用相对路径

CMake 将 Qt 运行时库复制到可执行输出路径

具有自动生成的源的Cmake可执行文件

Qt5 CMake将所有库包含到可执行文件中

CLion和CMake:仅构建没有可执行文件的库?

CMake可执行文件无法链接到新的接口库,具体取决于另一个库

CMake:将可执行文件写入多个子目录

带有相对路径的CMake安装目标

使用没有相对路径的 CMake 创建 Zip

CMake:将静态库从子目录链接到另一个子目录中的可执行文件

文件结构并在 Cmake 中使可执行文件

CMake可执行文件名称