在Windows中,当exe和dll文件位于同一目录中时,可以运行需要共享库(.exe
)的可执行文件(.dll
)。
在Linux中,即使可执行文件和共享库(.so
)位于同一目录中,Linux始终在最初构建.so的绝对目录中查找它,然后无法运行该可执行文件。
在运行可执行文件之前设置LD_LIBRARY_PATH
或RPATH
环境变量是一种临时解决方案,但是我想在不设置环境变量的情况下进行设置,并使它的行为类似于Windows。
我该怎么办?我添加了"-rpath=$ORIGIN"
to CMakelists,但仍然失败。
仅出于实验目的,我编写了一个简单的程序和另一个共享库,并尝试了dlopen
,它可以按我的意愿工作。但是,在这种情况下,我不使用dlopen
。
答案 0 :(得分:0)
我找到了解决方案:在CMakelists.txt中为可执行文件添加rpath
选项,对共享库添加不。