根据这个SO问题,Linux executable can't find shared library in same folder传递 restart = "n"
if shuffle_user == 'y':
random.shuffle(soccer_teams)
print("List after first shuffle: ", soccer_teams)
random.shuffle(soccer_teams)
print("List after second shuffle: ", soccer_teams)
input("Run Again? Y/N: ").lower()
是使Linux可执行文件在与可执行文件相同的目录中搜索-Wl,-rpath,${ORIGIN}
的方法。
我们正在使用cmake,所以我要添加一行表格
.so
至CMakeLists.txt。这样做的问题是cmake试图将九个字符序列target_link_options(Executable PRIVATE -Wl,-rpath=${ORIGIN})
解释为变量,然后将其替换为空。
到目前为止,我已经尝试过:
${ORIGIN}
没有一个有效。我该怎么做?
-编辑-
正如@Tsyvarev的评论所指出的,事实证明,在我的特定情况下,这是一个XY问题,因为cmake具有直接设计用来操纵rpath的功能。有了这个,我就能找到解决方案。
就我而言,将以下三行添加到CMakeLists.txt即可达到目的。
$${ORIGIN}
\${ORIGIN}
$\{ORIGIN\}
$$\{ORIGIN\}
\$\{ORIGIN\}
请注意,我们构建过程的一部分包括将SET(CMAKE_SKIP_BUILD_RPATH FALSE)
SET(CMAKE_BUILD_WITH_INSTALL_RPATH TRUE)
SET(CMAKE_INSTALL_RPATH "$\{ORIGIN\}")
复制到输出文件夹,以准备构建最终的tarball工件。因此,使用.so
既可以在构建树中进行测试,又可以在Docker容器中最终安装可执行文件。