Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/unix/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在Unix中构建二进制文件并在多台机器上使用它?_Unix_Makefile_Build Process_Configure_Binary Compatibility - Fatal编程技术网

如何在Unix中构建二进制文件并在多台机器上使用它?

如何在Unix中构建二进制文件并在多台机器上使用它?,unix,makefile,build-process,configure,binary-compatibility,Unix,Makefile,Build Process,Configure,Binary Compatibility,我有一个编译器的源代码,我是这样构建的: /path/to/srcdir/configure --prefix=/path/to/installdir make make install installdir/bin/ucc -mp -o test load_bl.c 我想将生成的“installdir”分发到其他机器上,目的是任何人都可以使用编译器二进制文件,而无需经过三阶段构建过程(我只是将installdir包含在我的分发tarball中) 为了进行测试,我将installdir复制到

我有一个编译器的源代码,我是这样构建的:

/path/to/srcdir/configure --prefix=/path/to/installdir
make
make install
installdir/bin/ucc -mp -o test load_bl.c
我想将生成的“installdir”分发到其他机器上,目的是任何人都可以使用编译器二进制文件,而无需经过三阶段构建过程(我只是将installdir包含在我的分发tarball中)

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

/path/to/srcdir/configure --prefix=/path/to/installdir
make
make install
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
是在我的生成计算机上进行
配置期间指定为
--前缀的内容。
installdir/bin/ucc
二进制文件需要installdir下的
open64-gcc-4.2.0
目录中的一些文件,但由于这是
--prefix
中提到的路径,因此它仍在那里查找,我希望它在当前机器中查找相同的目录。仅供参考,我没有sudo/root权限

在这种情况下,我如何设计一个可以在任何机器上运行的二进制发行版(构建一次,使用anywhere排序),而不查看初始的
--prefix
路径

我在《超级用户》中也遇到过类似的问题,但由于进行了大量的编辑,我对这个新问题没有得到任何回应,所以我在这里写了这个问题

检查此工具:


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

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