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_long
和 getopt_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 上缺少类模板方法