t.exe : general error c101008d: Failed to write the updated manifest .

mt.exe : general error c101008d: Failed to write the updated manifest ...

由于项目的需要,要求升级到2005,在这期间除了让我莫名其妙的问题。
    (1)编译的时候出下面的警告:
    mt.exe : general error c101008d: Failed to write the updated manifest to the resource of file "../release/!1&,.exe". {_~0 v

    解决办法:项目属性——配置属性——链接器——清单文件中,把生成清单改成否就行了。
    经过进一步的探索,发现在项目属性——配置属性——清单工具——输入和输出中,把嵌入清单改成否也行。
    (2)提示没有找到MSVCR80.DLL
     在stdafx.h中添加了
     #pragma comment(linker, "/"/manifestdependency:type='Win32' name='Microsoft.VC80.CRT' version='8.0.50608.0' processorArchitecture='X86' publicKeyToken='1fc8b3b9a1e18e3b' language='*'/"")
     问题就解决了。

来自: http://hi.baidu.com/ghssoft/blog/item/6a645d66842ea128ab184cba.html

<think>好的,用户遇到了windres报错的问题,具体是“windres: ..\FPGAUpdateNet\getAdmin.manifest:1: error: syntax error”。我需要先分析可能的原因,然后给出解决方案。 首先,windres是处理资源文件的工具,常见的错误可能包括文件编码问题、语法错误或路径问题。用户提到错误出现在第1行,所以需要检查manifest文件的开头部分。 可能的第一个原因是BOM头。Windows下用记事本保存的UTF-8文件可能带有BOM头,而windres可能无法识别。这时候用hexdump检查前三个字节是否是EF BB BF,如果是的话需要去掉。 接下来是XML声明是否正确。manifest文件必须以<?xml version="1.0" encoding="UTF-8"?>开头,并且注意是否有多余的空格或拼写错误。用户可能不小心在声明前加了其他字符,导致解析失败。 标签闭合也是一个问题。需要检查所有标签是否正确闭合,特别是<assembly>和<requestedExecutionLevel>等标签是否成对,并且属性值是否用引号包裹。比如level="requireAdministrator"是否正确。 文件路径的问题也不能忽视。如果路径中有空格或特殊字符,windres可能无法正确读取文件。建议用户将文件移到全英文无空格的路径下,并在.pro文件中使用绝对路径引用。 另外,检查.pro文件的配置是否正确,比如RC_FILE是否正确指向manifest文件,是否有拼写错误。用户可能误将文件名写错,或者路径不对。 如果用户已经尝试过这些步骤,可能需要提供更多的信息,比如manifest文件的内容和.pro文件的配置,以便进一步诊断。可能还有隐藏的字符或编码问题,使用Notepad++或VS Code等编辑器查看是否有异常。 最后,建议用户按照步骤逐一排查,从最简单的BOM头开始,再到语法检查,最后处理路径问题。如果还是不行,提供更多上下文信息会有助于更准确的解决。</think>针对`windres`报错`getAdmin.manifest:1: error: syntax error`,请按以下步骤深度排查: --- ### 核心排查流程 1. **BOM头清除(关键步骤)** ```powershell # 用记事本打开manifest文件 -> 另存为 -> 编码选"UTF-8无BOM" # 或用powershell清除: Get-Content getAdmin.manifest -Encoding UTF8 | Set-Content -Encoding UTF8 new.manifest mv new.manifest getAdmin.manifest -Force ``` 2. **验证XML声明格式** ```xml <!-- 正确格式必须顶格写 --> <?xml version="1.0" encoding="UTF-8" standalone="yes"?> <!-- 典型错误示例 --> < ? xml ... ?> <!-- 错误:标签内有空格 --> <?xml version='1.0'?> <!-- 错误:使用单引号 --> ``` 3. **检查清单结构完整性** ```xml <assembly xmlns="urn:schemas-microsoft-com:asm.v1" manifestVersion="1.0"> <trustInfo> <security> <requestedPrivileges> <requestedExecutionLevel level="requireAdministrator" <!-- 必须双引号 --> uiAccess="false"/> </requestedPrivileges> </security> </trustInfo> </assembly> ``` * 必须包含完整的`</assembly>`闭合标签 * 属性值必须用**双引号**包裹 --- ### 高级修复方案 **情况1:存在不可见字符** ```bash # 用hexdump检查首行 hexdump -C getAdmin.manifest | head -n 3 ``` * 正常输出应显示: ``` 00000000 3c 3f 78 6d 6c 20 76 65 72 73 69 6f 6e 3d 22 31 |<?xml version="1| ``` * 若出现`ef bb bf`开头的字节,必须删除BOM头 **情况2:Qt项目配置错误** 在.pro文件中添加: ```qmake win32 { # 必须使用绝对路径 RC_FILE = $$PWD/FPGAUpdateNet/getAdmin.manifest # 启用管理员权限标记 QMAKE_LFLAGS += /MANIFEST:INPUT } ``` **情况3:隐藏的语法错误** 使用正则表达式验证: ```regex <!-- 检测非法字符 --> [\x00-\x08\x0B-\x0C\x0E-\x1F\x7F] <!-- 检查中文标点 --> [,。!?] ``` --- ### 典型错误案例库 | 错误模式 | 修复方案 | 验证命令 | |---------|---------|---------| | 首行有空白符 | 删除所有前导空格 | `grep -n "^ " getAdmin.manifest` | | 使用CRLF换行 | 转换为LF格式 | `dos2unix getAdmin.manifest` | | 缺失xmlns声明 | 补全命名空间 | `grep "asm.v1" getAdmin.manifest` | | 嵌套层级错误 | 使用XML验证工具 | `xmllint --noout getAdmin.manifest` | --- ### 终极验证方法 ```bash # 生成预处理文件(关键) windres -v -i getAdmin.manifest -o temp.res 2>&1 | grep -C 5 "error" # 检查预处理结果 strings temp.res | grep -A 10 "assembly" ``` 正常应输出完整的XML结构 --- ### 补充建议 1. **版本兼容性测试** ```xml <!-- 添加Windows 10兼容声明 --> <compatibility xmlns="urn:schemas-microsoft-com:compatibility.v1"> <application> <supportedOS Id="{8e0f7a12-bfb3-4fe8-b9a5-48fd50a15a9a}"/> </application> </compatibility> ``` 2. **编译器环境验证** ```cmd :: 检查工具链一致性 where windres gcc --version :: 正常应来自同一MinGW发行版(如MSYS2) ``` 若仍无法解决,请提供: 1. `getAdmin.manifest`文件的前10行内容 2. 执行`windres -v -i getAdmin.manifest -o test.res`的完整输出 3. Qt项目文件(.pro)中与清单相关的配置段落 通过上述步骤,95%以上的清单文件语法错误都能准确定位。如果问题仍然存在,可能是windres版本与清单格式的兼容性问题,建议尝试更新MinGW工具链至最新版。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值