【发布时间】:2011-04-13 22:06:28
【问题描述】:
我有一些我编译和运行的 c 代码,在一个目录中,可以从许多不同的 unix 计算机(各种 linux 和 mac,偶尔还有其他)访问,不同的操作系统显然需要不同的可执行文件。
我有一个简单的 shell 脚本,它调用适当的可执行文件 prog.$OSTYPE.$MACHTYPE,如果需要,首先编译它。这非常简单(尽管它需要使用csh 才能可靠地定义$OSTYPE 和$MACHTYPE)并且几乎可以工作。
然而,事实证明,即使 $OSTYPE 和 $MACHTYPE 也不够:例如,在 OSX 10.5 上编译会生成一个可执行文件 prog.darwin.i386,在 OSX 10.4 上调用它时会立即崩溃。
是的,每次我想运行程序时都重新编译是解决这个问题的一种方法,但这似乎有点过分了。我知道在每台机器上都有一个bin 目录是一个标准的解决方案,但是非 root 用户可能在他们的主目录之外没有太多的写访问权限(这对所有机器都是通用的)。
所以我的问题是,有没有更好的方法?编译器(通常是 gcc)显然知道它正在为什么样的系统编译——有没有一种很好的可移植方法来找出我的脚本正在运行的“什么样的系统”,所以它可以调用正确的可执行文件,而不是一个有未定义的行为?
【问题讨论】:
标签: c shell gcc compiler-construction portability