Есть ли способ получить абсолютный путь к файлу, читаемому директивой #include <hdr.h>
?А для директивы #include "hdr.h"
?Я работаю под Win 10 / Msys2.
Я хочу найти, какой stdint.h
найден при компиляции src/sha1-git.c
, так как:
Он должен объявить uint32_t
и, видимо, он этого не делает, в соответствии с тем, что я получаю с
$ make -V=1
/bin/sh ../../libtool --tag=CC --mode=compile gcc -DPACKAGE_NAME=\"aircrack-ng\" -DPACKAGE_TARNAME=\"aircrack-ng\" -DPACKAGE_VERSION=\"1.5.2\" -DPACKAGE_STRING=\"aircrack-ng\ 1.5.2\" -DPACKAGE_BUGREPORT=\"https://forum.aircrack-ng.org\" -DPACKAGE_URL=\"\" -DPACKAGE=\"aircrack-ng\" -DVERSION=\"1.5.2\" -DSTDC_HEADERS=1 -DHAVE_SYS_TYPES_H=1 -DHAVE_SYS_STAT_H=1 -DHAVE_STDLIB_H=1 -DHAVE_STRING_H=1 -DHAVE_MEMORY_H=1 -DHAVE_STRINGS_H=1 -DHAVE_INTTYPES_H=1 -DHAVE_STDINT_H=1 -DHAVE_UNISTD_H=1 -DLT_OBJDIR=\".libs/\" -D_REVISION=\"1.5.2\" -DHAVE_OPENSSL_CRYPTO_H=1 -DHAVE_OPENSSL_CMAC_H=1 -DHAVE_OPENSSL_CMAC_H=1 -DHAVE_SQLITE3_H=1 -DHAVE_SQLITE3=1 -DHAVE_SQLITE=1 -D_FILE_OFFSET_BITS=64 -DHAVE_PTHREAD_PRIO_INHERIT=1 -D_REENTRANT=1 -DHAVE___MINGW_ALIGNED_MALLOC=1 -DCACHELINE_SIZE=64 -DINTEL_ASM=1 -DCACHELINE_SIZE=64 -I. -I../.. -I../../src/include -I../../src -DCYGWIN -DMSYS2 -D_FILE_OFFSET_BITS=64 -D_LARGEFILE64_SOURCE -D_FORTIFY_SOURCE=2 -pthread -Wall -O3 -std=gnu99 -fno-strict-aliasing -Wpointer-arith -Wstrict-overflow=2 -Wstrict-prototypes -fvisibility=hidden -Wno-unused-but-set-variable -Wno-array-bounds -mconsole -mwindows -DMSYS2 -MT libaircrack_crypto_la-sha1-git.lo -MD -MP -MF .deps/libaircrack_crypto_la-sha1-git.Tpo -c -o libaircrack_crypto_la-sha1-git.lo `test -f 'sha1-git.c' || echo './'`sha1-git.c
libtool: compile: gcc -DPACKAGE_NAME=\"aircrack-ng\" -DPACKAGE_TARNAME=\"aircrack-ng\" -DPACKAGE_VERSION=\"1.5.2\" "-DPACKAGE_STRING=\"aircrack-ng 1.5.2\"" -DPACKAGE_BUGREPORT=\"https://forum.aircrack-ng.org\" -DPACKAGE_URL=\"\" -DPACKAGE=\"aircrack-ng\" -DVERSION=\"1.5.2\" -DSTDC_HEADERS=1 -DHAVE_SYS_TYPES_H=1 -DHAVE_SYS_STAT_H=1 -DHAVE_STDLIB_H=1 -DHAVE_STRING_H=1 -DHAVE_MEMORY_H=1 -DHAVE_STRINGS_H=1 -DHAVE_INTTYPES_H=1 -DHAVE_STDINT_H=1 -DHAVE_UNISTD_H=1 -DLT_OBJDIR=\".libs/\" -D_REVISION=\"1.5.2\" -DHAVE_OPENSSL_CRYPTO_H=1 -DHAVE_OPENSSL_CMAC_H=1 -DHAVE_OPENSSL_CMAC_H=1 -DHAVE_SQLITE3_H=1 -DHAVE_SQLITE3=1 -DHAVE_SQLITE=1 -D_FILE_OFFSET_BITS=64 -DHAVE_PTHREAD_PRIO_INHERIT=1 -D_REENTRANT=1 -DHAVE___MINGW_ALIGNED_MALLOC=1 -DCACHELINE_SIZE=64 -DINTEL_ASM=1 -DCACHELINE_SIZE=64 -I. -I../.. -I../../src/include -I../../src -DCYGWIN -DMSYS2 -D_FILE_OFFSET_BITS=64 -D_LARGEFILE64_SOURCE -D_FORTIFY_SOURCE=2 -pthread -Wall -O3 -std=gnu99 -fno-strict-aliasing -Wpointer-arith -Wstrict-overflow=2 -Wstrict-prototypes -fvisibility=hidden -Wno-unused-but-set-variable -Wno-array-bounds -mconsole -mwindows -DMSYS2 -MT libaircrack_crypto_la-sha1-git.lo -MD -MP -MF .deps/libaircrack_crypto_la-sha1-git.Tpo -c sha1-git.c -DDLL_EXPORT -DPIC -o .libs/libaircrack_crypto_la-sha1-git.o
sha1-git.c: In function 'blk_SHA1_Final':
sha1-git.c:328:21: error: 'uint32_t' undeclared (first use in this function); did you mean 'wint_t'?
padlen[0] = htonl((uint32_t)(ctx->size >> 29));
РЕДАКТИРОВАТЬ
В дереве подкаталогов моего Msys2 довольно много
stdint.h
в качестве кандидатов.Я
должен быть в состоянии отследить "от руки", что
stdint.h
включено, проверяя командную строку компиляции, перечислены каталоги порядка и т. Д., И я делал это несколько раз раньше.Но я хочу сделать это автоматически, чтобы избежать ошибок.
PS: Поскольку я нахожусь под Msys2, я изменил (рекурсивно) все вхождения #include <arpa/inet.h>
на #include <winsock.h>
в src/*.h
и src/*.c
.В файле src/sha1-git.c
я добавил #include <stdint.h>
сразу после этого (вставив строку 43), чтобы получить uint32_t
.
PS2: Был еще один файл src/aircrack-crypto/sha1-git.c
, в котором не было #include <stdint.h>
.Компиляция этого файла была проблемой.Я добавил #include ...
в этот другой файл, и компиляция продолжилась .
PS3: я хочу сделать эту работу, так что, возможно, ответ на этот конкретный ОП - только один шаг вперед к цели, нонедостаточно ... РЕДАКТИРОВАТЬ 2 Подтверждено.После выполнения make V=1 CFLAGS="-I/usr/include" LDFLAGS="-L/usr/lib"
(в противном случае sys/wait.h
не было обнаружено при компиляции common.c
), я получил
.../MSYS2Portable/App/msys32/mingw64/x86_64-w64-mingw32/include/winsock.h:309:34: error: conflicting types for 'gethostname'
WINSOCK_API_LINKAGE int WSAAPI gethostname(char *name,int namelen);
^~~~~~~~~~~
In file included from .../MSYS2Portable/App/msys32/usr/include/unistd.h:4,
from common.c:42:
.../MSYS2Portable/App/msys32/usr/include/sys/unistd.h:300:6: note: previous declaration of 'gethostname' was here
int gethostname (char *__name, size_t __len);
^~~~~~~~~~~
make[2]: *** [Makefile:713: libaircrack_util_la-common.lo] Error 1
Кажется, файлы в mingw64/x86_64-w64-mingw32/include
не соответствуют файлам в usr/include
.И нет sys/wait.h
в mingw64/x86_64-w64-mingw32/include
, поэтому я должен также добавить usr/include
в путь поиска, что вызывает у меня проблемы.
Я бы скорее всего отказался от компиляции под Msys2, и я бы получилVBox.