为什么 LD_LIBRARY_PATH 仅在 ~/Desktop/ 中起作用?

为什么 LD_LIBRARY_PATH 仅在 ~/Desktop/ 中起作用?

如果我运行应用程序应用程序~/Desktop/得到:

/home/me/Desktop/app: error while loading shared libraries: somelib.so.0: cannot open shared object file: No such file or directory

所以我创建了这个脚本应用程序

DIR="$(dirname "$0")"
export LD_LIBRARY_PATH=$DIR
$DIR/app

进而应用程序運行。

但是,我决定不将其放在桌面上,而是放在 下~/dev/apps/。因此,我移动了所有文件(app、somelib.so.0、app.sh),并在运行脚本时出现此错误:

/home/me/dev/apps/app: error while loading shared libraries: somelib.so.0: cannot open shared object file: No such file or directory

如果我移动它,它~/foo/bar/仍然无法运行。

请注意:

  • 所有目录和文件具有相同的权限。
  • 所有文件都位于同一目录中。
  • ~/Destop/app.sh我从或调用该脚本~/dev/app/app.sh
  • 我正在运行它/home/me

这是正常行为还是我的设置或配置有问题?

答案1

您可以LD_LIBRARY_PATH像这样添加显式路径:

export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/home/me/Desktop/app/lib

(使用库的示例路径)

您也可以将其添加到您的.bash_profile

您还可以/usr/lib在您的库中创建软链接

答案2

我意识到,在复制 Nautilus 中的所有文件时,动态库被复制为软链接,文件大小要小得多。

删除该库并从 bash 再次复制它解决了该问题。

我将 Nautilus 作为标签添加到问题中。但是,即使再次从 Nautilus 复制粘贴,也无法重现此问题。

相关内容