在Linux下生成GUID的程序,及编译错误 “uuid/uuid.h: No such file or directory” 的解决办法。

本文详细介绍了如何在Linux环境下使用C语言编写程序生成全局唯一标识符(GUID)。包括程序实现、编译方法及遇到的依赖问题解决过程。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

在Linux下编写生成GUID的程序,如下 guid.c 文件:

#include <stdio.h>
#include <uuid/uuid.h>

void uuid2string(const uuid_t uu, char* const str) // 把uuid转成字符串。
{
    int i;
    for(i=0;i<16;i++)
        sprintf(str+i*2, "%02X",uu[i]);
    return;
}

void main()
{
    int i;
    char buf[200];
    uuid_t uu;

    uuid_generate(uu);

    printf("{");
    for(i=0;i<15;i++)
        printf("%02X-",uu[i]);
    printf("%02X}\n",uu[15]);

    uuid2string(uu, buf);
    printf("%s\n",buf);

    return;
}


编译guid.c文件:

# gcc -o guid guid.c -luuid

如果在编译时出现错误“uuid/uuid.h: No such file or directory”,解决办法:安装 libuuid-devel 软件包。

如下直接用yum命令安装:

[root@localhost]# yum install libuuid-devel
Loaded plugins: fastestmirror, refresh-packagekit, security
Loading mirror speeds from cached hostfile
 * base: mirrors.btte.net
 * epel: mirrors.yun-idc.com
 * extras: mirrors.btte.net
 * updates: mirrors.btte.net
Setting up Install Process
Resolving Dependencies
--> Running transaction check
---> Package libuuid-devel.x86_64 0:2.17.2-12.14.el6 will be installed
--> Processing Dependency: libuuid = 2.17.2-12.14.el6 for package: libuuid-devel-2.17.2-12.14.el6.x86_64
--> Running transaction check
---> Package libuuid.i686 0:2.17.2-12.7.el6_3 will be updated
--> Processing Dependency: libuuid = 2.17.2-12.7.el6_3 for package: libblkid-2.17.2-12.7.el6_3.x86_64
--> Processing Dependency: libuuid = 2.17.2-12.7.el6_3 for package: util-linux-ng-2.17.2-12.7.el6_3.x86_64
---> Package libuuid.x86_64 0:2.17.2-12.7.el6_3 will be updated
---> Package libuuid.i686 0:2.17.2-12.14.el6 will be an update
---> Package libuuid.x86_64 0:2.17.2-12.14.el6 will be an update
--> Running transaction check
---> Package libblkid.x86_64 0:2.17.2-12.7.el6_3 will be updated
---> Package libblkid.x86_64 0:2.17.2-12.14.el6 will be an update
---> Package util-linux-ng.x86_64 0:2.17.2-12.7.el6_3 will be updated
---> Package util-linux-ng.x86_64 0:2.17.2-12.14.el6 will be an update
--> Finished Dependency Resolution

Dependencies Resolved

================================================================================
 Package              Arch          Version                   Repository   Size
================================================================================
Installing:
 libuuid-devel        x86_64        2.17.2-12.14.el6          base         84 k
Updating for dependencies:
 libblkid             x86_64        2.17.2-12.14.el6          base        115 k
 libuuid              i686          2.17.2-12.14.el6          base         68 k
 libuuid              x86_64        2.17.2-12.14.el6          base         68 k
 util-linux-ng        x86_64        2.17.2-12.14.el6          base        1.5 M

Transaction Summary
================================================================================
Install       1 Package(s)
Upgrade       4 Package(s)

Total download size: 1.9 M
Is this ok [y/N]: y
Downloading Packages:
(1/5): libblkid-2.17.2-12.14.el6.x86_64.rpm              | 115 kB     00:00     
(2/5): libuuid-2.17.2-12.14.el6.i686.rpm                 |  68 kB     00:00     
(3/5): libuuid-2.17.2-12.14.el6.x86_64.rpm               |  68 kB     00:00     
(4/5): libuuid-devel-2.17.2-12.14.el6.x86_64.rpm         |  84 kB     00:00     
(5/5): util-linux-ng-2.17.2-12.14.el6.x86_64.rpm         | 1.5 MB     00:04     
--------------------------------------------------------------------------------
Total                                           332 kB/s | 1.9 MB     00:05     
Running rpm_check_debug
Running Transaction Test
Transaction Test Succeeded
Running Transaction
Warning: RPMDB altered outside of yum.
  Updating   : libuuid-2.17.2-12.14.el6.x86_64                              1/9
  Updating   : libblkid-2.17.2-12.14.el6.x86_64                             2/9
  Updating   : util-linux-ng-2.17.2-12.14.el6.x86_64                        3/9
  Installing : libuuid-devel-2.17.2-12.14.el6.x86_64                        4/9
  Updating   : libuuid-2.17.2-12.14.el6.i686                                5/9
  Cleanup    : util-linux-ng-2.17.2-12.7.el6_3.x86_64                       6/9
  Cleanup    : libuuid-2.17.2-12.7.el6_3                                    7/9
  Cleanup    : libblkid-2.17.2-12.7.el6_3.x86_64                            8/9
  Cleanup    : libuuid-2.17.2-12.7.el6_3                                    9/9
  Verifying  : libblkid-2.17.2-12.14.el6.x86_64                             1/9
  Verifying  : util-linux-ng-2.17.2-12.14.el6.x86_64                        2/9
  Verifying  : libuuid-2.17.2-12.14.el6.i686                                3/9
  Verifying  : libuuid-2.17.2-12.14.el6.x86_64                              4/9
  Verifying  : libuuid-devel-2.17.2-12.14.el6.x86_64                        5/9
  Verifying  : libuuid-2.17.2-12.7.el6_3.x86_64                             6/9
  Verifying  : libuuid-2.17.2-12.7.el6_3.i686                               7/9
  Verifying  : util-linux-ng-2.17.2-12.7.el6_3.x86_64                       8/9
  Verifying  : libblkid-2.17.2-12.7.el6_3.x86_64                            9/9

Installed:
  libuuid-devel.x86_64 0:2.17.2-12.14.el6                                       

Dependency Updated:
  libblkid.x86_64 0:2.17.2-12.14.el6   libuuid.i686 0:2.17.2-12.14.el6          
  libuuid.x86_64 0:2.17.2-12.14.el6    util-linux-ng.x86_64 0:2.17.2-12.14.el6  

Complete!
[root@localhost]#
D:\edk2\Build\MdeModule\DEBUG_VS2019\X64\MdeModulePkg\Application\BootCountDriver\BootCountDriver\DEBUG\AutoGen.h(16): fatal error C1083: ޷򿪰ļ: PiDxe.h: No such file or directory ע: ļ: D:\edk2\MdePkg\Include\Library/PeiServicesLib.h ע: ļ: D:\edk2\MdePkg\Include\Library/UefiDriverEntryPoint.h ע: ļ: D:\edk2\MdePkg\Include\Uefi/UefiBaseType.h ע: ļ: D:\edk2\MdePkg\Include\Protocol/GraphicsOutput.h ע: ļ: D:\edk2\MdePkg\Include\Protocol/DriverConfiguration.h ע: ļ: D:\edk2\MdePkg\Include\Pi/PiS3BootScript.h ע: ļ: D:\edk2\MdePkg\Include\Protocol/DriverDiagnostics2.h ע: ļ: D:\edk2\MdePkg\Include\Protocol/SimpleTextOut.h ע: ļ: D:\edk2\MdeModulePkg\Include\Ppi/UsbHostController.h ע: ļ: D:\edk2\MdePkg\Include\Library/DebugLib.h ע: ļ: D:\edk2\MdePkg\Include\Library/CacheMaintenanceLib.h ע: ļ: D:\edk2\MdePkg\Include\Library/MemoryAllocationLib.h ע: ļ: D:\edk2\MdePkg\Include\Uefi/UefiGpt.h ע: ļ: D:\edk2\MdePkg\Include\Protocol/GraphicsOutput.h ע: ļ: D:\edk2\MdePkg\Include\Library/DebugLib.h ע: ļ: D:\edk2\MdePkg\Include\Guid/PcAnsi.h ע: ļ: D:\edk2\MdePkg\Include\Guid/DebugImageInfoTable.h NMAKE : fatal error U1077: D:\Compiler\VS2019\VC\Tools\MSVC\14.29.30133\bin\Hostx86\x64\cl.exe: ش롰0x2 ע: ļ: D:\edk2\MdePkg\Include\Library/BaseMemoryLib.h ע: ļ: D:\edk2\MdePkg\Include\Library/UefiLib.h ע: ļ: D:\edk2\MdePkg\Include\Base.h ע: ļ: D:\edk2\MdePkg\Include\Protocol/SimpleFileSystem.h ע: ļ: D:\edk2\MdePkg\Include\Protocol/DriverConfiguration2.h ע: ļ: D:\edk2\MdePkg\Include\Ppi/CpuIo.h ע: ļ: D:\edk2\MdePkg\Include\Protocol/GraphicsOutput.h ע: ļ: D:\edk2\MdePkg\Include\Uefi/UefiPxe.h ע: ļ: D:\edk2\MdePkg\Include\Ppi/BlockIo.h ע: ļ: D:\edk2\MdePkg\Include\Library/PeimEntryPoint.h ע: ļ: D:\edk2\MdePkg\Include\Library/PeiServicesTablePointerLib.h ע: ļ: D:\edk2\MdeModulePkg\Include\Library/AuthVariableLib.h ע: ļ: D:\edk2\MdePkg\Include\Uefi/UefiInternalFormRepresentation.h ע: ļ: D:\edk2\MdePkg\Include\Protocol/SimpleFileSystem.h ע: ļ: D:\edk2\MdePkg\Include\Library/DevicePathLib.h ע: ļ: D:\edk2\MdePkg\Include\IndustryStandard/Bluetooth.h ע: ļ: D:\edk2\MdePkg\Include\Guid/FileInfo.h Stop. ע: ļ: D:\edk2\MdePkg\Include\Library/TimerLib.h build.py... : error 7000: Failed to execute command D:\Compiler\VS2019\VC\Tools\MSVC\14.29.30133\bin\Hostx86\x86\nmake.exe /nologo tbuild [D:\edk2\Build\MdeModule\DEBUG_VS2019\X64\MdeModulePkg\Application\BootCountDriver\BootCountDriver] ע: ļ: D:\edk2\MdePkg\Include\IndustryStandard/Acpi.h ע: ļ: D:\edk2\MdePkg\Include\X64\ProcessorBind.h ע: ļ: D:\edk2\MdePkg\Include\Library/DevicePathLib.h ע: ļ: D:\edk2\MdePkg\Include\Protocol/ComponentName.h ע: ļ: D:\edk2\MdePkg\Include\Ppi/PciCfg2.h ע: ļ: D:\edk2\MdePkg\Include\Protocol/SimpleFileSystem.h ע: ļ: D:\edk2\MdePkg\Include\Uefi/UefiGpt.h ע: ļ: D:\edk2\MdePkg\Include\Ppi/BlockIo2.h ע: ļ: D:\edk2\MdePkg\Include\Library/BaseMemoryLib.h ע: ļ: D:\edk2\MdePkg\Include\Library/MemoryAllocationLib.h ע: ļ: D:\edk2\MdeModulePkg\Include\Library/VarCheckLib.h ע: ļ: D:\edk2\MdePkg\Include\Guid/HiiFormMapMethodGuid.h ע: ļ: D:\edk2\MdePkg\Include\Library/BaseLib.h ע: ļ: D:\edk2\MdePkg\Include\Library/MemoryAllocationLib.h ע: ļ: D:\edk2\MdePkg\Include\IndustryStandard/Acpi60.h ע: ļ: D:\edk2\MdePkg\Include\Guid/Apriori.h ע: ļ: D:\edk2\MdePkg\Include\Library/IoLib.h build.py... : error F002: Failed to build module D:\edk2\MdeModulePkg\Application\BootCountDriver\BootCountDriver.inf [X64, VS2019, DEBUG]
03-26
<think>好的,我现在需要帮助用户解决他们在编译EDK2项目时遇到的错误。用户提供的错误信息显示,在编译过程中出现了“PiDxe.h: No such file or directory”的问题。此外,还有其他多个头文件的引用问题,最后导致编译失败。我需要分析这些错误的原因,并提供解决方案。 首先,我注意到主要的错误是找不到PiDxe.h文件。这个文件属于EDK2的MdeModulePkg,可能用户的项目配置中没有正确包含该头文件的路径,或者该文件确实缺失。接下来,其他错误中提到的头文件路径,比如MdePkg中的库文件,可能涉及到环境变量设置或编译工具链的问题。 可能的步骤包括: 1. 检查PiDxe.h是否存在于EDK2的正确目录中。默认情况下,应该在MdeModulePkg的Include目录下。如果不存在,可能需要确认代码库是否完整,或者是否执行了正确的子模块初始化(如果使用git的话)。 2. 确认EDK2的环境变量是否正确设置,例如WORKSPACE、EDK_TOOLS_PATH等,确保编译器能够找到所有必要的包含路径。 3. 检查项目的.inf文件是否正确定义了所需的库和协议依赖。例如,是否缺少对MdeModulePkg.dec的引用,导致头文件路径未被包含。 4. 确认编译工具链的配置是否正确,比如VS2019的路径是否正确,环境是否通过edksetup.bat正确初始化。 5. 查看EDK2的构建日志,确认具体的编译命令,检查包含路径是否正确生成。 6. 如果用户最近有代码更改,可能需要回退或检查修改是否引入了依赖问题。 7. 确保EDK2的代码库是最新的,执行git pull和git submodule update,以获取最新的代码和模块。 此外,用户的其他错误涉及多个头文件找不到,可能意味着整个包含路径存在问题,或者某些包未正确添加到项目中。需要系统性地检查构建配置,例如target.txt、tools_def.txt等文件是否正确设置了编译器的选项和路径。 最后,用户可能需要清理之前的构建缓存,重新生成Makefile,然后再次尝试编译,以排除缓存导致的路径错误。</think>在编译EDK2项目时遇到`PiDxe.h`等头文件未找到的错误,通常与环境配置或依赖关系有关。以下是逐步解决方案: --- ### **第一步:检查头文件是否存在** 1. 确认`PiDxe.h`的物理路径: 该文件应位于`D:\edk2\MdeModulePkg\Include\PiDxe.h`。 - 如果文件缺失,可能是代码库不完整。尝试执行: ```bash git submodule update --init --recursive ``` --- ### **第二步:检查EDK2环境变量** 1. 确保已正确设置EDK2环境变量: - 打开命令行,进入EDK2目录(`D:\edk2`),运行: ```bash edksetup.bat ``` - 检查`Conf/target.txt`中工具链配置是否为`VS2019`: ```ini ACTIVE_PLATFORM = MdeModulePkg/MdeModulePkg.dsc TOOL_CHAIN_TAG = VS2019 ``` --- ### **第三步:验证头文件包含路径** 1. 检查`.inf`文件依赖: 打开`BootCountDriver.inf`,确认是否包含以下声明: ```ini [Packages] MdePkg/MdePkg.dec MdeModulePkg/MdeModulePkg.dec # 必须包含此包以引用PiDxe.h ``` 2. 检查`.dsc`文件配置: 确保`MdeModulePkg.dsc`或你的平台描述文件包含对`MdeModulePkg.dec`的引用。 --- ### **第四步:修复工具链配置** 1. 确认Visual Studio 2019路径正确: - 打开`Conf/tools_def.txt`,检查`VS2019`相关路径是否指向正确位置(如`D:\Compiler\VS2019`)。 2. 清理并重新生成编译文件: ```bash python BaseTools/Edk2ToolsBuild.py -t VS2019 build -p MdeModulePkg/MdeModulePkg.dsc -m MdeModulePkg/Application/BootCountDriver/BootCountDriver.inf -a X64 -b DEBUG -t VS2019 --cleanall build -p MdeModulePkg/MdeModulePkg.dsc -m MdeModulePkg/Application/BootCountDriver/BootCountDriver.inf -a X64 -b DEBUG -t VS2019 ``` --- ### **第五步:排查其他潜在问题** 1. **路径分隔符问题**: 部分错误提示`Library/PeiServicesLib.h`(斜杠方向错误),但EDK2通常兼容正反斜杠。若问题持续,尝试手动替换为`\`。 2. **依赖冲突**: 如果最近修改过代码,尝试回退更改或检查新增的协议/库是否正确声明。 --- ### **附:典型错误原因总结** | 现象 | 解决方案 | |------|----------| | `PiDxe.h`未找到 | 确认`MdeModulePkg.dec`被引用,路径正确 | | 多文件未找到 | 运行`edksetup.bat`重置环境变量 | | `NMAKE U1077`错误 | 检查工具链路径,清理并重新编译 | 若仍存在问题,请提供完整的构建日志(`Build/*/build.log`)以进一步分析。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值