Egzotikus rendszeren nehéz a fordítás...

Esetünkben az egzotikus rendszer linux/amd64, a fordítandó termék a nmap-7.94, a hibaüzenet:

gcc -fvisibility=hidden -m64 -std=c99  -fpic -I.  -DBUILDING_PCAP -Dpcap_EXPORTS -DHAVE_CONFIG_H  -m64 -std=c99    -c ./fad-getad.c
./pcap/bpf.h:97:9: error: unknown type name 'u_int'
 typedef u_int bpf_u_int32;

Hozzászólások

Szerkesztve: 2023. 07. 25., k – 13:25

Ha a CFLAGS-ba beletesszük ezt: -D_BSD_SOURCE (nem is a CPPFLAGS-ba, jóhogy!), akkor más hibákat kapunk:

./gencode.c:806:4: warning: implicit declaration of function 'freeaddrinfo' [-Wimplicit-function-declaration]
    freeaddrinfo(cstate.ai);

Még csapjuk hozzá ezt: -D_XOPEN_SOURCE.

Ezek után már csak egy dolgunk van: keressünk egy másik gépet, ahol újabb libgcrypt van.

Csak kíváncsiságból kérdem, miért adod meg kétszer a gcc-nek, hogy -m64 -std=c99 ?

Szerkesztve: 2023. 07. 25., k – 21:08

Amúgy: mi az _X_OPEN_SOURCE értéke a definíciókor nálad? A freeadrinfo() a POSIX.1-2001-be került bele: https://pubs.opengroup.org/onlinepubs/009695399/basedefs/netdb.h.html#t…

Régebbi POSIX-nak nem lehetett a része, egy 1999-es RFC definiálta: https://www.rfc-editor.org/rfc/rfc2553.html#section-6.4

https://www.gnu.org/software/libc/manual/html_node/Feature-Test-Macros…

Azaz _X_OPEN_SOURCE értéke ez alapján 600 vagy 700 legyen. Ha más az értéke, akkor a freeaddrinfo nem lesz elérhető:

f the macro _XOPEN_SOURCE has the value 500 this includes all functionality described so far plus some new definitions from the Single Unix Specification, version 2. The value 600 (corresponding to the sixth revision) includes definitions from SUSv3, and using 700 (the seventh revision) includes definitions from SUSv4.

Tehát nem elég csak definiálni az _X_OPEN_SOURCE makrót, konkrét értéket is adj neki. Különben nem fogod megkapni, csak a régi, 1997 előtti POSIX.1 és POSIX.2 definíciókat.

Szerintem nem olyan nehéz a fordítás, csak megfelelően kell használni a Feature test macrokat.

Ez régi glibc-nél van így.

Nálam ezt mondja a manual:
 

   Feature Test Macro Requirements for glibc (see feature_test_macros(7)):

       getaddrinfo(), freeaddrinfo(), gai_strerror():
           Since glibc 2.22: _POSIX_C_SOURCE >= 200112L
           Glibc 2.21 and earlier: _POSIX_C_SOURCE
 

Szóval alaposan nézd át a glibc verziókat, feature test makrókat. Nem várt mellékhatások lehetnek, ha ezek nem passzolnak.

A tenyleges kerdes igazabol az, hogy melyik disztro nem csomagol nmap-et, es neked miert pont az a disztro kell?

A strange game. The only winning move is not to play. How about a nice game of chess?