在检查构建的二进制rpath之后:
objdump -x snake |grep 'R.*PATH'
,我在控制台中收到此消息:
/home/name/Desktop/sfmlsnake/snake/SFML/lib
这是我的sfml .so文件所在的地方,当我从他们的网站下载sfml时得到的文件。
这是我的文件结构:
snake
-build
--<this is where the built program appears, i run cmake and make from here>
-tinyfiledialogs
-SFML
--lib
---<SFML .so, .a Files, this is where the built programs rpath points to>
--include
-source
--<source.cpp files>
-CMakeLists.txt
我使用了互联网上的许多解决方案,这些解决方案声称可以按照我想做我的程序做的事情,但是,所有这些解决方案都导致该程序仍链接到SFML/lib目录中的.SO文件。当我放置时:
set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -Wl,-rpath='$ORIGIN'")
在我的cmakelists.txt文件中,就在另一个commands。 the命令:
set
.
返回:
objdump -x snake |grep 'R.*PATH'
.
我发现的所有其他解决方案都是这种情况。PS: 我的项目是在Github上开源的,如果您需要查看其制作方式。不过,请确保查看CMake-Port分支。
https://github.com/xtrel/sfmlsnake/tree/cmake-port
如果您想打包游戏以进行重新分配,则需要使用CPACK/CINTALL机制。这种机制使您只能指定rpath:
RUNPATH $ORIGIN:/home/hubert/Desktop/Pendrive/sfmlsnake/snake/SFML/lib
您可以通过设置
set_property(TARGET ${PROJECT_NAME} PROPERTY INSTALL_RPATH '$ORIGIN')
来为构建树做同样的事情,但是默认值通常是您想要的。
您也可以考虑设置INSTALL_RPATH