加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

c – cmake – 是否可以在运行时将可执行文件链接到具有相对路径

发布时间:2020-12-16 09:58:02 所属栏目:百科 来源:网络整理
导读:让我说我有这个: ../project_dir main.cpp mylib.cpp mylib.h 构建步骤将是: g++ -c mylib.cpp -o mylib.og++ -shared -o libmylib.so mylib.og++ -L$(pwd) -Wl,-rpath='$ORIGIN' -o exec main.cpp -lmylib exec将是我的二进制可执行输出.当我测试时: ldd
让我说我有这个:

../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做到这一点?

解决方法

当您启动ldd以检查应用程序共享库依赖项时,它始终打印绝对路径.但是如果你将-rpath oprtion与$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)

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读