使用libgit2共享库编译C项目时遇uint8_t未知类型错误求助
uint8_t/uint64_t未定义错误 环境与编译尝试
在GitHub Codespaces、Windows、MacOS X Ventura环境下,先后尝试以下编译命令:
命令1(gcc-13)
gcc-13 -L./libgit2-1.6.4/build -I./libgit2-1.6.4/include/git2 main.c ini.c
出现错误:
In file included from /Library/Developer/CommandLineTools/SDKs/MacOSX13.sdk/usr/include/sys/wait.h:110,
from /Library/Developer/CommandLineTools/SDKs/MacOSX13.sdk/usr/include/stdlib.h:66,
from main.c:3:
/Library/Developer/CommandLineTools/SDKs/MacOSX13.sdk/usr/include/sys/resource.h:203:9: error: unknown type name 'uint8_t'
203 | uint8_t ri_uuid[16];
| ^~~~~~~
/Library/Developer/CommandLineTools/SDKs/MacOSX13.sdk/usr/include/sys/resource.h:204:9: error: ...
命令2(clang)
clang -L./libgit2-1.6.4/build -I./libgit2-1.6.4/include/git2 -I./inih-r56 main.c
出现类似错误:
In file included from main.c:3:
In file included from /Library/Developer/CommandLineTools/SDKs/MacOSX.sdk/usr/include/stdlib.h:66:
In file included from /Library/Developer/CommandLineTools/SDKs/MacOSX.sdk/usr/include/sys/wait.h:110:
/Library/Developer/CommandLineTools/SDKs/MacOSX.sdk/usr/include/sys/resource.h:203:2: error: unknown type name 'uint8_t'
uint8_t ri_uuid[16];
^
/Library/Developer/CommandLineTools/SDKs/MacOSX.sdk/usr/include/sys/resource.h:204:2: error: unknown type name 'uint64_t'
uint64_t ri_user_time;
^
.....
项目目录结构
├── inih-r56 │ ├── LICENSE.txt │ ├── README.md │ ├── cpp │ ├── examples │ ├── fuzzing │ ├── ini.c │ ├── ini.h │ ├── meson.build │ ├── meson_options.txt │ └── tests ├── libgit2-1.6.4 │ ├── AUTHORS │ ├── CMakeLists.txt │ ├── COPYING │ ├── README.md │ ├── SECURITY.md │ ├── api.docurium │ ├── build │ ├── ci │ ├── cmake │ ├── deps │ ├── docs │ ├── examples │ ├── fuzzers │ ├── git.git-authors │ ├── include │ ├── package.json │ ├── script │ ├── src │ └── tests └── main.c
libgit2 build目录结构
├── CMakeCache.txt ├── CMakeFiles │ ├── 3.26.3 │ ├── CMakeConfigureLog.yaml │ ├── CMakeDirectoryInformation.cmake │ ├── CMakeRuleHashes.txt │ ├── CMakeScratch │ ├── Makefile.cmake │ ├── Makefile2 │ ├── TargetDirectories.txt │ ├── cmake.check_cache │ ├── pkgRedirects │ └── progress.marks ├── CTestTestfile.cmake ├── Makefile ├── cmake_install.cmake ├── deps │ ├── http-parser │ └── ntlmclient ├── include │ ├── git2 │ └── git2.h ├── libgit2.pc ├── src │ ├── CMakeFiles │ ├── Makefile │ ├── cli │ ├── cmake_install.cmake │ ├── libgit2 │ └── util └── tests ├── CMakeFiles ├── CTestTestfile.cmake ├── Makefile ├── cmake_install.cmake ├── headertest ├── libgit2 └── util
问题分析与解决办法
错误核心是uint8_t/uint64_t等固定宽度整数类型未被定义,这类类型属于C99标准,需确保编译环境正确引入相关定义:
调整头文件包含顺序
在main.c最开头先包含<stdint.h>,确保系统头文件引用前已定义类型:#include <stdint.h> #include <stdlib.h> // 其他头文件...指定C标准并补全链接参数
编译命令添加-std=c99指定C99标准,同时修正头文件路径(libgit2头文件需通过git2/xxx.h引用,应包含上级目录),并加上-lgit2链接库:gcc-13 -std=c99 -L./libgit2-1.6.4/build -I./libgit2-1.6.4/include -I./inih-r56 main.c ini.c -lgit2重新配置libgit2编译
进入libgit2-1.6.4/build目录,重新指定C标准编译libgit2:cmake .. -DCMAKE_C_STANDARD=99 make clean && makeMacOS环境修复
更新Xcode Command Line Tools到最新版本,解决SDK头文件兼容性问题:xcode-select --install
内容的提问来源于stack exchange,提问作者Chaitanya Sharma

