mt.exe:general error c101008d(最终原因已查明)

该错误为: 

mt.exe : general error c101008d: Failed to write the updated manifest to the resource of file "./Release/*****.exe". f 
最终原因已查明见最后一部分
上网找了一下,只有英文网页有相关讨论,懒得去翻译了。中文网页中倒是有一个,而且有解决办法,那就是在项目属性——配置属性——链接器——清单文件中, 把生成清单改成否就行了。 

经过进一步的探索,发现在项目属性——配置属性——清单工具——输入和输出中,把嵌入清单改成否也行。 

然而,问题虽然解决了,原因却还不明。因为,既然生成清单和嵌入清单是微软的默认设置,为什么却会出现错误呢?第一种方法的作者认为清单是.net程序 (托管程序)需要的,所以去掉后便能正常生成了,然而后一种方法仍然生成了清单,而且也能正常运行又作何解,而且微软的说明中也没有提到清单只是为CLR 程序准备的,而是应该所有程序都要加上清单。 

更新:还有一种更简单的方法:如果编译前将所有打开的与该项目有关的文件都关掉,也可以解决问题。

最终原因已查明
由于VC需要把生成的文件中嵌入MANIFEST文件,而由于杀毒软件之类的会握有这个文件句柄(因为杀毒软件
发现这个EXE,DLL正在读写),于是VC就写不进去了,方法是暂时关闭杀毒软件,这样就不用
改写MANIFECT
我用的是瑞星杀毒软件,有这个问题.
Hi,

This might be due to antivirus holding open handle on the exe generated and thus when VS tries to embed the manifest it fails with access denied. 
Is Antivirus running on your machine? Does this repro with Antivirus turned off?

If above is not the case can you provide us with a repro.

Thanks,

VC++ Team

### GCC 编译生成 HEX 文件时遇到链接器错误解决方案 当使用 GCC 编译嵌入式项目并尝试生成 `.hex` 文件时,如果遇到 `collect2.exe: error: ld returned 1 exit status` 的链接器错误,通常意味着存在未解析的符号或其他配置问题。 #### 可能的原因及解决方法: - **库文件缺失或路径不正确** 如果使用的标准库或者其他第三方库不在链接器能够找到的位置,则会出现此类错误。确保所有必要的库都已正确指定,并且路径无误[^1]。 - **启动文件和链接脚本设置不当** 对于大多数微控制器平台来说,在构建过程中需要提供特定的启动代码以及描述内存布局的链接脚本。确认这些资源已被加入到编译命令中。例如对于 ARM Cortex-M 系列MCU可以这样操作: ```bash arm-none-eabi-gcc -T linker_script.ld startup.s main.c -o output.elf ``` - **优化选项影响** 高级别的优化可能会引入一些复杂性,有时会导致意外的行为。降低优化级别(如 `-O0` 或者 `-Os`),有助于排除这类潜在因素的影响[^4]。 - **交叉编译环境差异** 使用不同版本的工具链可能导致兼容性方面的问题。建议保持一致性的开发环境,尤其是针对 Windows 和 Linux 平台之间的移植工作要特别注意这一点[^3]。 为了更具体地解决问题,下面给出一个完整的例子来展示如何通过调整 Makefile 来成功创建 `.hex` 文件而不触发上述提到的链接失败情况: ```makefile # 定义变量 TARGET = project_name CC = arm-none-eabi-gcc LD = arm-none-eabi-ld OBJCOPY = arm-none-eabi-objcopy CFLAGS += -mcpu=cortex-m4 -mfpu=fpv4-sp-d16 -mfloat-abi=hard -Wall -Wextra -g -ffunction-sections -fdata-sections -MD -MP -MF"$(@:%.o=%.d)" -MT"$@" -std=c99 $(INCLUDE_DIRS) LDFLAGS += -nostartfiles -Xlinker --gc-sections -T$(LINKER_SCRIPT_PATH) # 构建规则 all: $(TARGET).hex %.o : %.c $(CC) $(CFLAGS) -c $< -o $@ $(TARGET).elf: $(OBJECT_FILES) $(LD) $(LDFLAGS) -o $@ $^ $(TARGET).hex: $(TARGET).elf $(OBJCOPY) -O ihex $< $@ ``` 在这个示例中,假设已经定义好了 `OBJECT_FILES`, `INCLUDE_DIRS` 和 `LINKER_SCRIPT_PATH` 这些宏用于存储源码对象列表、头文件目录集合还有链接脚本位置的信息。此Makefile片段展示了从 C 源程序开始直到最终得到 Intel Hex 格式的整个流程控制逻辑。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值