由mkbundle(来自C#程序)生成的程序适用于Ubuntu,但不适用于Redhat

时间:2012-01-05 17:16:30

标签: c# linux mono redhat glibc

我在Windows 7,64位上编写了一个关于Visual C#2010 Express的程序。经过一番挣扎,我设法让它在我的Ubuntu虚拟机(32位)下工作(在MonoDevelop中重新编译并使用了mkbundle)。客户告诉我他有以下版本:“Linux版本2.6.18-274.el5.028stab093.2(root @ rhel5-build-x64)(gcc版本4.1.2 20080704(Red Hat 4.1.2-46)) ”。命令“cat / etc / redhat-release”返回“CentOS版本5.7(最终版)”。我已经访问了他的服务器,并上传了mkbundle的输出(在Ubuntu下工作正常)。该程序返回以下错误:

$ ./ProgName img.jpg
./ProgName: /lib/libc.so.6: version `GLIBC_2.9' not found (required by ./ProgName)
./ProgName: /lib/libc.so.6: version `GLIBC_2.11' not found (required by ./ProgName)
./ProgName: /lib/libc.so.6: version `GLIBC_2.8' not found (required by ./ProgName)

我该如何解决这个问题?我对Linux系统知之甚少。我假设我需要下载上面给出的库,但我有以下问题:

  1. 如果我下载这些库,它是否会以任何方式损害服务器?我不想伤害客户端的服务器。
  2. 为什么一个“mkbundled”的程序需要任何额外的库?我在mkbundle中使用了“--static”,输出的文件是5.7 mb,所以我认为它已经包含了所有必需的库。
  3. 还有其他方法可以解决这个问题吗?

    编辑:我想,也许如果我设法在客户端的服务器上编译项目,它可以工作,但我找不到这个版本的Linux的单声道。有没有办法在该系统上安装mono?如果没有,那么我还有其他选择吗?在最糟糕的情况下,我正在考虑用C ++重写我的程序。

1 个答案:

答案 0 :(得分:1)

一般来说,为不同的Linux发行版制作一个二进制文件是一项痛苦而艰巨的工作,特别是如果你对linux不太了解的话。问题是发行版(甚至是同一发行版的不同版本)之间的二进制兼容性很少见。

我的建议是分发托管程序集(即不通过mkbundle运行程序),但我发现可能有充分的理由你没有这样做。另一种选择是在类似于客户端的系统上运行mkbundle,并将该版本发送给他。