在Ubuntu 16.04的Ur/Pase/bin中安装C++应用程序在从home目录执行时不能正确运行 我已经从C++程序中创建了一个DEB包。我遵循这个简单的指南。我成功地在usr/local/bin安装了deb。 然而,我面临着以下问题。当我从主目录运行我的应用程序时,C++主程序启动,但是当它到达一个需要从设置文件读取的点时,它就好像它不存在一样。此文件驻留在与C++可执行文件相同的文件夹中。 另一方面,当我去----Ur/Pase/Bin并运行我的C++应用程序时,没有问题。我还为所有文件授予了读写和执行权限。 既然/usr/local/bin已经存在于我的路径中,为什么会发生此错误?

在Ubuntu 16.04的Ur/Pase/bin中安装C++应用程序在从home目录执行时不能正确运行 我已经从C++程序中创建了一个DEB包。我遵循这个简单的指南。我成功地在usr/local/bin安装了deb。 然而,我面临着以下问题。当我从主目录运行我的应用程序时,C++主程序启动,但是当它到达一个需要从设置文件读取的点时,它就好像它不存在一样。此文件驻留在与C++可执行文件相同的文件夹中。 另一方面,当我去----Ur/Pase/Bin并运行我的C++应用程序时,没有问题。我还为所有文件授予了读写和执行权限。 既然/usr/local/bin已经存在于我的路径中,为什么会发生此错误?,c++,ubuntu,installation,C++,Ubuntu,Installation,因为应用程序的路径是当前路径,而不是安装位置。您需要找出正确加载文件的应用程序路径-如果使用Qt,则有applicationPath,如果没有,则必须: char szTmp[32]; sprintf(szTmp, "/proc/%d/exe", getpid()); int bytes = MIN(readlink(szTmp, pBuf, len), len - 1); if(bytes >= 0) pBuf[bytes] = '\0'; return bytes;

因为应用程序的路径是当前路径,而不是安装位置。您需要找出正确加载文件的应用程序路径-如果使用Qt,则有applicationPath,如果没有,则必须:

char szTmp[32];
sprintf(szTmp, "/proc/%d/exe", getpid());
int bytes = MIN(readlink(szTmp, pBuf, len), len - 1);
if(bytes >= 0)
        pBuf[bytes] = '\0';
return bytes;

确定应用程序安装文件夹并基于此加载文件。

您的文件由相对路径提供?感谢您的快速响应。目前,我正在使用poco库,尤其是poco::Path::current来构建设置文件的路径。因此,您的意思是,即使它安装在usr/local/bin中,当我从主目录运行时,Poco::Path::current返回主目录?例如。current是当前目录,不是安装路径。再次感谢。最后一个问题,因为我以前没有安装linux的经验。由于应用程序将安装在我选择的特定位置,因此加载/usr/local/bin/c++应用程序的绝对路径将效率低下。这种方法有什么缺点吗?可以忽略不计