2015-12-02 7 views
3

Мне сложно определить, как добавить getopt.h в мою AIX 7.1. Я использую функцию getopt_long в своем коде, который, как я знаю, находится в getopt.h вместо unistd.h (который содержит getopt()).getopt.h отсутствует в aix 7.1

Этот код не компиляции в AIX:

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

Здесь установлены пакеты GCC:

НКУ-4.8.3-1.aix7.1.ppc.rpm
НКУ -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' являются функциями, специфичными для GNU, которые могут отсутствовать в AIX. –

+0

'getopt_long' - это функция GNU. Я не знаю, если это поможет, но на моих машинах Debian Linux 'dlocate' сообщает' libc6-dev: amd64:/usr/include/getopt.h' - то есть это часть ** GNU libc **. В худшем случае вам, возможно, придется прибегнуть к тесту autoconf и написать '# ifdef', разрешая только короткие варианты, если он не находит' getopt_long() '. –

ответ

0

getopt_long GNU-only, но вы можете воспользоваться свободной реализацией (например, 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 ». – vladon

+0

Спасибо Владон и Андерс. Я попал в https://www.gnu.org/software/gnulib/manual/html_node/index.html#Top, который позволяет расширять GNU-расширения в не-GNU-операционных системах. Нужно загрузить исходный код, интегрировать его в свою инфраструктуру make/configure и затем использовать его. Компиляция getopt.h работала, следуя процедуре, упомянутой в ссылке выше. Однако из-за некоторых других проблем компиляции я не смог проверить, действительно ли он работает во время выполнения! –