aix 7.1 中缺少 getopt.h

Posted

技术标签:

【中文标题】aix 7.1 中缺少 getopt.h【英文标题】:getopt.h missing in aix 7.1 【发布时间】:2016-03-06 19:49:40 【问题描述】:

我很难弄清楚如何在我的 AIX 7.1 中添加 getopt.h。我在我的代码中使用了getopt_long 函数,我知道它在getopt.h 中而不是unistd.h 中(其中包含getopt())。

此代码未在 AIX 中编译:

fatal error: getopt.h: No such file or directory
 #include <getopt.h>
                    ^
compilation terminated.

这里是安装的 gcc 包:

gcc-4.8.3-1.aix7.1.ppc.rpm gcc-c++-4.8.3-1.aix7.1.ppc.rpm libgcc-4.8.3-1.aix7.1.ppc.rpm gcc-cpp-4.8.3-1.aix7.1.ppc.rpm

我已经浏览了这些链接,但它们并没有太大帮助:

http://www.ibm.com/developerworks/aix/library/au-unix-getopt.html#sthash.Loz3H0AH.dpuf http://www.linuxmisc.com/8-freebsd/eb9bdab1cf6044d5.htm

还有很多其他的网络搜索。

我是否缺少一些 rpm 或一些环境变量?

【问题讨论】:

我猜 getopt_longgetopt_long_only 是 GNU 特定的函数,在 AIX 中可能不存在。 getopt_long 是一个 GNU 函数。我不知道这是否有帮助,但在我的 Debian Linux 机器上,dlocate 报告了libc6-dev:amd64: /usr/include/getopt.h - 即它是 GNU libc 的一部分。在最坏的情况下,您可能不得不求助于autoconf 测试,并编写一个#ifdef,当它找不到getopt_long() 时只允许短选项。 【参考方案1】:

getopt_long 仅适用于 GNU,但您可以免费实现(例如,this 声称它是 BSD 许可证,如果我理解正确的话)或编写自己的实现(这并不难)和在你的代码中使用它。

【讨论】:

AIX != GNU。所以 getopt_long 不是它原生的。获得 BSD 许可的 getopt_long 的更权威来源是 FreeBSD(可能还有 NetBSD)libc 的一部分:svnweb.freebsd.org/base/head/lib/libc/stdlib/… @Anders "AIX != GNU",是的,我的意思是“getopt_long is GNU-only”。 感谢弗拉登和安德斯。我最终遇到了gnu.org/software/gnulib/manual/html_node/index.html#Top,它允许将 GNU 扩展拉入非 GNU 操作系统。必须下载源代码,将其集成到您的制作/配置基础架构中,然后使用它。 getopt.h 的编译按照上面链接中提到的过程进行。但是由于其他一些编译问题,我无法测试它在运行时是否真的有效! 我最终转向了 popt 库。它在 Linux 和 AIX 上以 rpm 的形式现成可用。代码更改也不多。我只需要向 options 变量添加额外的参数以使其与 popt 兼容。 AIX 的 rpm 可在 perzl 网站上找到 - perzl.org/aix/index.php?n=Main.Popt

以上是关于aix 7.1 中缺少 getopt.h的主要内容,如果未能解决你的问题,请参考以下文章

使用可可豆荚的 Parse 1.7.1 中缺少 PFImageView

Xcode 7.1 在 El Capitan 上缺少类模板方法

AIX查看系统版本

aix 7.1安装sudo

Crashlytics:“我们缺少处理崩溃的 dSYM”[关闭]

缺少System.Security.dll程序集