模块计算机类型“ARM”与目标计算机类型“X86”冲突

本文主要介绍了在编程过程中遇到的模块计算机类型ARM与目标计算机类型X86冲突的问题,提供了LNK2001错误的解决办法,并详细解释了如何通过调整链接器设置或添加SDK来解决冲突。同时,还提到了TRACE报错和fopen_s标识符未找到的错误解决方案,以及DLL部署的相关注意事项。

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

 

1.error LNK2001: 无法解析的外部符号 CLSID_ImagingFactory 和 IID_IImagingFactory

.h文件添加:#include <imaging.h>
.cpp文件添加:
#include <initguid.h>
#include <imgguids.h>

imgguids.h里加上:

#pragma  once
#include <initguid.h>
#include <Imaging.h>

 

其他两个头文件也加上#pragma  once

-----------------

2. fatal error LNK1112: 模块计算机类型“ARM”与目标计算机类型“X86”冲突

解决方法:链接器 -> 命令行 -> 附加选项, 添加 /MACHINE:ARM /MACHINE:THUMB

fatal error LNK1112: 模块计算机类型“THUMB”与目标计算机类型“ARM”冲突

解决方法:

第1种&#

### Native Compilation 和 Cross Compilation 的定义 Native compilation 是指在一个目标平台上运行的程序由该平台上的编译器直接生成可执行文件的过程[^1]。这意味着开发环境和最终的目标运行环境是相同的。 Cross compilation 则是指在一个主机平台上构建另一个不同目标平台所需的软件的过程[^3]。这种情况下,开发环境目标运行环境并不相同。 --- ### 差异分析 #### 1. **适用场景** - **Native Compilation**: 适用于开发者希望在同一硬件架构和操作系统下完成整个开发生命周期的情况。例如,在 Linux 上编写并测试一个仅用于 Linux 平台的应用程序时,可以使用本地编译工具链来简化流程。 - **Cross Compilation**: 当目标设备资源有限(如嵌入式系统),无法承载完整的编译过程或者需要快速迭代而不想每次都重新上传源码到目标设备时,则更适合采用交叉编译方法。比如为 ARM 架构设计应用程序却在 x86 PC 上进行开发工作。 #### 2. **性能考量** - 使用 native compiler 可能会更简单快捷因为不需要额外配置特定于其他系统的工具链设置;然而如果目标机器计算能力较弱则可能延长整体构建时间甚至不可行。 - 对于 cross compiler 而言虽然前期准备较为复杂但由于利用了强大桌面级计算机来进行繁重运算所以通常能够显著加快项目进度尤其针对那些小型低功耗处理器作为实际部署场所的产品来说非常有利。 #### 3. **依赖管理** - 在某些框架中可能存在限制使得不能轻易实现跨平台操作——像提到过的 `native-image` 就明确指出其本身不具备支持跨OS之间互相转换的能力因此建议保持原始未定制状态直到最后阶段再做相应调整以便适应多种潜在需求变化[^2]。 - 如果涉及到多模块混合编程(Java+Android),可能会遇到兼容性障碍导致常规手段失效需寻找替代方案解决冲突问题如分离各自独立部分单独处理后再组合起来形成完整解决方案[^4]。 --- ### 示例代码展示两种模式下的基本区别 以下是简单的 C 程序例子分别展示了如何通过 GNU Compiler Collection (GCC) 实现这两种类型的编译: ```c // hello.c 文件内容如下: #include <stdio.h> int main() { printf("Hello, world!\n"); return 0; } ``` #### Native Compilation Example: 假设当前正在使用的是一台基于 X86_64 架构且安装有标准 GCC 套件的 Ubuntu 系统可以直接输入命令如下即可获得适合本机执行的结果: ```bash gcc -o hello_native hello.c ./hello_native # 输出: Hello, world! ``` #### Cross Compilation Example: 为了创建能够在另一类 CPU 类型上工作的二进制版本我们需要指定相应的前缀名以及路径变量指向预设好的外部库位置信息等参数之后才能顺利完成任务具体做法参见下面示范片段: ```bash export PATH=/opt/crosstool/gcc-arm-linux-gnueabihf/bin:$PATH export CC=arm-linux-gnueabihf-gcc $CC -o hello_cross hello.c file hello_cross # 应显示类似于 'ELF 32-bit LSB executable...' 表明它确实是ARM格式的数据结构形式而非原本PC端所熟悉的那种类型。 ``` --- ### 总结 选择哪种编译策略取决于具体的项目要求和技术约束条件。对于大多数桌面应用而言,原生编译通常是首选项因为它更加直观易懂同时也减少了不必要的麻烦环节;而对于物联网领域或者其他特殊用途场合往往更多倾向于运用跨界技术从而突破物理界限达成预期效果最大化的目的。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值