【问题标题】:How to build binaries and use it in several machines in Unix?如何构建二进制文件并在 Unix 的多台机器上使用它?
【发布时间】:2011-12-28 06:08:29
【问题描述】:

我有我正在构建的编译器的源代码:

/path/to/srcdir/configure --prefix=/path/to/installdir
make
make install

我想将生成的“installdir”分发到其他机器,目的是让任何人都可以使用编译器二进制文件而无需经过 3 阶段构建过程(我只是将 installdir 包含在我的分发 tarball 中)。

为了测试,我将 installdir 复制到另一个用户下的另一台机器上,然后尝试使用我刚刚复制过来的二进制文件来编译测试程序,如下所示:

installdir/bin/ucc -mp -o test load_bl.c

然后,我收到如下错误:

cc1: error: /home/sghosh/normalbuild/installdir/open64-gcc-4.2.0/include: Permission denied
cc1: error: /home/sghosh/normalbuild/installdir/open64-gcc-4.2.0/lib/gcc/x86_64-redhat-linux/4.2.0/include: Permission denied
cc1: error: /home/sghosh/normalbuild/installdir/open64-gcc-4.2.0/x86_64-redhat-linux/include: Permission denied

/home/sghosh/normalbuild/install 是在我的构建机器上configure 期间指定为--prefix 的内容。 installdir/bin/ucc 二进制文件需要 installdir 下 open64-gcc-4.2.0 目录中的一些文件,但由于那是--prefix 中提到的路径,所以它仍在那里寻找它,我希望它查看当前目录中的相同目录机器。仅供参考,我没有 sudo/root 权限。

我如何想出一个可以在任何机器上工作的二进制分发(构建一次,在任何地方使用排序),而不是在这种情况下查看初始的 --prefix 路径?

我在超级用户中遇到过类似的问题,但是由于进行了很多编辑并且我没有得到对新问题的回复,所以我在这里写它。

【问题讨论】:

  • 您是在制作静态 bin 还是使用共享对象 (.so) 的 bin。如果你不能在所有机器上创建相同的目录层次结构,.sos 的嵌入路径将失败,因为它们不存在于正确的位置。我不明白您为什么会收到“权限被拒绝”。您是否检查过 obj 所有权的用户/组名称(可能是相同的整数值)与您的构建机器匹配,并且这些目录的权限设置是否正确?如果您不能在 rmt machs 上 su root 来克服 perm 问题,那么构建一个嵌入所有库的静态二进制文件可能是一个更好的解决方案。
  • 感谢您的回答,是的,我将--disable-shared 选项传递给configure 语句。但我注意到,尽管如此,安装目录中仍有一些.so 文件。 “权限被拒绝”可能是因为它试图为.so 文件找到与我的构建机器相同的目录(如你所说)。我猜这个问题完全是因为我无法制作一个静态垃圾箱。
  • 我搜索了[make] static linking,找到了几个很好的相关问题的答案。祝你好运。
  • 如果即使您在./configure 步骤中指定了--disable-shared 也会发生这种情况,那么这可能是您正在使用的软件发行版中的构建错误。因此,可能值得在该工具的支持空间中询问这一点。
  • 不要在您的分发包中包含二进制文件。时期。如果要分发二进制文件,则必须使用二进制分发工具。大多数平台都为某种包管理工具(debrpmpkg)提供了很好的支持。如果您想分发二进制文件,请使用其中一种工具。

标签: unix makefile build-process configure binary-compatibility


【解决方案1】:

查看此工具:https://github.com/pgbovine/CDE

CDE 是一种工具,可自动打包运行任何 Linux 命令集所涉及的代码、数据和环境,以便它们无需任何安装或配置即可在另一台计算机上以相同方式执行。

【讨论】:

    猜你喜欢
    • 2020-08-21
    • 2021-03-29
    • 2016-08-04
    • 1970-01-01
    • 1970-01-01
    • 2016-09-15
    • 2011-03-30
    • 2022-11-21
    • 1970-01-01
    相关资源
    最近更新 更多