我无法在Redhat(CentOS)中使用Debian(Ubuntu)的C 程序

I am unable to run a C++ program in Debian(Ubuntu) that works in Redhat(Centos)

本文关键字:Debian Ubuntu 程序 Redhat CentOS      更新时间:2023-10-16

tldr:在ubuntu debian的Centos Redhat中编译C 程序遇到困难。我应该在这两个之间知道什么可以使用同一编译器编译的C 程序?

您好,我正在尝试编译并运行种系(http://www1.cs.columbia.edu/~gusev/germline/)。它在Redhat CentOS中正常工作,但是因为Centos对我所切换的大多数事情都不像Ubuntu那样受到支持。现在该程序不起作用。它完全有可能使用某种唯一的RedHat功能,但是我使用相同的编译器(G )在两个环境中对其进行编译。

我一直在拔头发,只是试图让这件事可以在Ubuntu上工作,因为它可以很好地使用,但是到目前为止旋转(永远不会结束)。无论我使用哪种二进制文件(在Centos中编译并复制,我刚才提到的失败的测试二进制文件等),该程序总是会冻结。

有点长,对不起。我的主要问题是:我可以尝试其他C 编译器替代方案吗?我可能缺少任何红帽C 库。或在其C 实现的主要差异,这会导致此?

我看了该软件。它的输入代码有点脆弱,在这种情况下,我不确定Ubuntu或Red Hat的C 库是否有障碍,但是可以轻松地修复该程序以在这两个方面工作。

在文件 PEDIndividualsExtractor.cpp中,在函数 void PEDIndividuasExtractor::loadInput()中,更改行:

while (!stream.eof() )

to:

while (stream)

和重新编译。

使用while(!stream.eof())是一个常见的错误。如果语句stream.eof()是正确的,则没有必要意味着带有流的最后一个操作成功。

这是一些BASH脚本,可以用GNU g++4.6编译包装:

wget http://www1.cs.columbia.edu/~gusev/germline/germline-1-5-1.tar.gz
tar -xzvf germline-1-5-1.tar.gz
cd germline-1-5-1/
perl -p -i.bak -e's/!stream.eof()/stream/g' PEDIndividualsExtractor.cpp
perl -p -i.bak -e's/!stream_sample.eof()/stream_sample/g' HMIndividualsExtractor.cpp
make all
cat test/generated.out

您应该指定第一个错误的确是什么,您没有提供足够的信息来说明问题是什么,但是我猜却丢失了依赖性。

任何不错的软件包都带有依赖项列表,您是否检查过并检查了要求吗?

在没有要求和依赖项列表的情况下,在这种情况下的一个好的经验法则是检查第一个错误是什么并解决了。例如,如果第一个错误说"丢失foolib.h",则需要为该机器安装" hoodib"。

  1. make all作为自己的步骤,然后检查所有内容都可以。
  2. 运行make tests,然后检查以查看哪些测试失败。

这些是您的第一步,可能会让您大部分时间到达那里。

正如上面所述,您需要检查编译器版本之间的编译器版本与Ubuntu和Redhat之间的相同。每当gcc中有主要版本升级时,我都有一些(次要)问题。

如果您只需要在Ubuntu上使用该程序,则可以使用--static配置程序来编译静态可执行文件,然后将可执行文件复制到Ubuntu。

或者,您可以使用ldd命令查找.so文件,链接到并将这些.so文件链接到动态可执行文件的同一目录,然后将它们放在Ubuntu上运行。您还可以将.so文件放在另一个目录中,并使用LD_LIBRARY_PATH来帮助可执行文件查找.so文件。