由于预编译的二进制文件只是可移植文件:手动存储它们而不会使我的系统混乱的正确位置是什么?
答案1
通常的地方是/usr/local
或/opt
用于更大的完整应用程序。
我将所有自编译的应用程序放入/usr/local/stow/application_name
,使用make install
或一些类似的命令来复制整个层次结构。
然后使用stow
它们来管理符号链接。优点是所有路径(二进制、库)都可以开箱即用,并且应用程序很好地分开,我可以轻松地再次删除它们。
bin
这也是我将预编译的二进制文件放入application_name
.
由于预编译的二进制文件只是可移植文件
我不知道你的意思。预编译的二进制文件非常多不是可移植,这取决于它们是为哪种架构编译的。您也不知道它们是为哪些库版本编译的。在该版本中,您的系统上可能不存在这些库。
对于您的 Pomotroid 示例,如果我想在我的计算机上使用它,我会这样做:
他们有一个
.deb
软件包,而我使用的是 Debian 衍生的发行版,所以我只需下载它并将其安装在我的系统上。下一个变体是克隆 下的存储库
/usr/local/src/pomotroid
,在其中运行构建,修改安装过程以使用/usr/local/stow/pomotroid
,运行安装过程,然后使用stow
。这就是我处理系统上大部分自编译软件的方式。第三种变体是将
rpm
包构建过程添加到存储库,发出拉取请求,并rpm
在将来为我(以及需要包的其他人rpm
)提供发布包第四种变体是获取分布式 tar 文件,将其解压为类似的文件
/usr/local/app/pomotroid
(/opt/app/pomotroid
也可以),然后编写一个脚本,LD_LIBRARY_PATH
在执行其中的主程序之前进行设置(之前从未尝试过安装电子应用程序) 。
tar 文件包含相当多的动态库,我的系统上也有可能不同版本的动态库,所以我真的不只是希望它们出现在默认库路径中以供其他程序拾取 - 这可能会严重搞乱我的系统。
如果我想定期更新到最新版本,我要么开始编写安装过程的脚本,要么花一些时间来rpm
构建一个包。