2015-12-02 27 views
3

我很難搞清楚如何在AIX 7.1中添加getopt.h。我在我的代碼中使用了getopt_long函數,我知道它是在getopt.h而不是unistd.h(其中包含getopt())。aix中缺少getopt.h 7.1

此代碼不能編譯在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

我已經通過這些鏈接了,但他們並沒有多大幫助:

也有很多其他的網絡搜索。

我是否缺少一些rpms或一些環境變量?

+0

我猜'getopt_long'和'getopt_long_only'是在AIX中可能不存在的特定於GNU的函數。 –

+0

'getopt_long'是一個GNU函數。我不知道它是否有幫助,但在我的Debian Linux機器上,'dlocate'報告'libc6-dev:amd64:/ usr/include/getopt.h' - 即它是** GNU libc **的一部分。在最壞的情況下,你可能不得不求助於'autoconf'測試,並且寫一個'#ifdef',當它沒有找到'getopt_long()'時只允許短的選項。 –

回答

0

getopt_long是GNU專用的,但您可以免費實現(例如,this聲稱它是BSD許可證,如果我理解正確的話)或者編寫您自己的實現(並不那麼難)並將其用於你的代碼。

+1

AIX!= GNU。所以getopt_long不是原生的。 BSD授權的更權威的源代碼getopt_long是FreeBSD(也可能是NetBSD)libc的一部分:https://svnweb.freebsd.org/base/head/lib/libc/stdlib/getopt_long.c?view=markup – Anders

+0

@Anders 「AIX!= GNU」,是的,我的意思是它在「'getopt_long'下是GNU-only」。 – vladon

+0

謝謝弗拉貢和安德斯。我最終遇到了https://www.gnu.org/software/gnulib/manual/html_node/index.html#Top,它允許將GNU擴展插入非GNU操作系統。必須下載源代碼,將其集成到您的make/configure基礎架構中,然後使用它。 getopt.h的編譯按照上述鏈接中提到的步驟工作。不過,有些其他編譯問題我還沒有能夠測試它是否在運行時真正起作用! –