http://blog.csdn.net/pipisorry/article/details/37610401

LINK : fatal error LNK1123: 转换到 COFF 期间失败: 文件无效或损坏

错误:

在更新VS2010,或者卸载VS2012安装2010后,建立Win32 Console Project/MFC项目时会出现"LINK : fatal error LNK1123: 转换到 COFF 期间失败: 文件无效或损坏"的错误:

1>正在编译资源...
1>正在编译资源清单...
1>正在链接...
1>LINK : fatal error LNK1123: 转换到 COFF 期间失败: 文件无效或损坏
1>生成日志保存在
解决方案:
第一步:
将 项目——项目属性——配置属性——连接器——清单文件——嵌入清单 “是”改为“否”。
若还不能解决问题进入第二步:

第二步:查看计算机是否为64bit操作系统,如是,继续如下操作。
查找是否有两个cvtres.exe。
C:\Program Files(x86)\Microsoft Visual Studio 10.0\vc\bin\cvtres.exe
C:\Windows\Microsoft.NET\Framework\v4.0.30319\cvtres.exe
右键属性—详细信息, 查看两者版本号,删除/重命名较旧的版本,或者重新设置Path变量。
治本的办法是第二步,删除旧版本的cvtres.exe后,就不需要每次都设置配置了。

皮皮blog

VC++的链接错误LNK2005 已经在*.obj中定义

LNK2005错误——重复定义错误

形成的原因:

1. 重复定义全局变量。可能存在两种情况:
A、 对于一些初学编程的程序员,有时候会以为需要使用全局变量的地方就可以使用定义申明一下。其实这是错误的,全局变量是针对整个工程的。正确的应该是在一个CPP文件中定义如下:int g_Test;那么在使用的CPP文件中就应该使用:extern int g_Test即可,如果还是使用int g_Test,那么就会产生LNK2005错误,一般错误错误信息类似:AAA.obj error LNK2005 int book c?book@@3HA already defined in BBB.obj。切记的就是不能给变量赋值否则还是会有LNK2005错误。
       这里需要的是“声明”,不是“定义”!根据C++标准的规定,一个变量是声明,必须同时满足两个条件,否则就是定义:
(1)声明必须使用extern关键字;(2)不能给变量赋初值
所以,下面的是声明:
extern int a;
下面的是定义
int a; int a = 0; extern int a =0;
B、对于那么编程不是那么严谨的程序员,总是在需要使用变量的文件中随意定义一个全局变量,并且对于变量名也不予考虑,这也往往容易造成变量名重复,而造成LNK2005错误。

2. 头文件的包含重复。往往需要包含的头文件中含有变量、函数、类的定义,在其它使用的地方又不得不多次包含之,如果头文件中没有相关的宏等防止重复链接的措施,那么就会产生LNK2005错误。解决办法是在需要包含的头文件中做类似的处理:#ifndef MY_H_FILE   //如果没有定义这个宏
#define MY_H_FILE   //定义这个宏
…….   //头文件主体内容
…….
#endif
上面是使用宏来做的,也可以使用预编译来做,在头文件中加入:
#pragma once
//头文件主体
3. 使用第三方的库造成的。这种情况主要是C运行期函数库和MFC的库冲突造成的。具体的办法就是将那个提示出错的库放到另外一个库的前面。另外选择不同的C函数库,可能会引起这个错误。微软和C有两种C运行期函数库,一种是普通的函数库:LIBC.LIB,不支持多线程。另外一种是支持多线程的:msvcrt.lib。如果一个工程里,这两种函数库混合使用,可能会引起这个错误,一般情况下它需要MFC的库先于C运行期函数库被链接,因此建议使用支持多线程的msvcrt.lib。所以在使用第三方的库之前首先要知道它链接的是什么库,否则就可能造成LNK2005错误。如果不得不使用第三方的库,可以尝试按下面所说的方法修改,但不能保证一定能解决问题,前两种方法是微软提供的:
A、 选择VC菜单Project->Settings->Link->Catagory选择Input,再在Ignore libraries 的Edit栏中填入你需要忽略的库,如:Nafxcwd.lib;Libcmtd.lib。然后在Object/library Modules的Edit栏中填入正确的库的顺序,这里需要你能确定什么是正确的顺序,呵呵,God bless you!
B、 选择VC菜单Project->Settings->Link页,然后在Project Options的Edit栏中输入/verbose:lib,这样就可以在编译链接程序过程中在输出窗口看到链接的顺序了。
C、 选择VC菜单Project->Settings->C/C++页,Catagory选择Code Generation后再在User Runtime libraray中选择MultiThread DLL等其他库,逐一尝试。
关于编译器的相关处理过程,参考:
http://www.donews.net/xzwenlan/archive/2004/12/23/211668.aspx

4.在用第三方库时,由于errno被重定义,用多种方法都不能解决,后查找MSDN,发现link有个选项/FORCE可以解决,在IDE下
Project->Settings->Link页,选categroy为custom,将force file output前打勾
但会有警告
warning LNK4088: image being generated due to /FORCE option; image may not run

但的确解决了问题,这是由于VC对重定义比较严格,像BCB或GCC在库中的重定义不会有任何警告或错误

5.另外一个出现LINK2005的现象,好像是由于名称空间而引起的。我在dos下写的程序没有问题,但是放在mfc中就出现了这个链接错误。因为起初图省事,我在一个头文件中写了using namespace std,并且这个头文件我多处使用,另外,我还使用了boost库。后来,问题解决的方法非常奇怪,在一个头文件中引用其他头文件,这些头文件的顺序换一下就通过了,那个出现问题的头文件中我使用了std::map,当我把这种容器使用模板代替后,链接就有没事了。(例如:template<class coll>),后来感到模板技术还有这种效果

ps:这种情况好像就是因为库的版本冲突造成的。标准的C++库使用C运行期函数库。MFC使用了自己的C运行期函数库。调整头文件的顺序也就是调整链接库的顺序。在这种情况下一般是将MFC的运行期库放在前面即可!

6.#pragma comment( linker, "/NODEFAULTLIB:msvcprtd.lib" )
#pragma comment( linker, "/NODEFAULTLIB:libcmtd.lib" )
#pragma comment( linker, "/NODEFAULTLIB:msvcprt.lib" )
#pragma comment( linker, "/NODEFAULTLIB:libcmt.lib" )

#ifdef _UNICODE
  #pragma comment( linker, "/ENTRY:wWinMainCRTStartup" )
#endif

#ifdef _DEBUG
  #pragma comment( lib, "cryptlibd" )
#else
  #pragma comment( lib, "cryptlib" )
#endif

7.我的解决:

static char * strReverse(char *str);

引入的.cpp或,h文件中的函数前面加上static,运行成功!!!

[http://bbs.csdn.net/topics/70346371]

皮皮blog

写入位置时发生访问冲突

原因总结:

1:使用了未初始化的指针(未给指针分配空间)

2:使用了已经删除的指针

3.char str[]="ABCD",这个数组的存储空间是在栈中开辟的(在栈中开辟了一个数组?)

char *str="ABCD",str指向的是静态存储区,"ABCD"是位于常量区的,指针str只是指向了这个位置(只在栈中开辟了一个指针内存?),那么这些值就不能被修改。而上面数组中,要注意的是把字符复制到数组的元素中,那么就是可以被任意修改的。

例:

char* str = "ABCD"; //char str[] = "ABCD";可以解决
strrev(str);
char * strrev(char str[]){
int j, i;
for(i = 0, j = strlen(str) - 1; i < j; i++, j--){
char tmp = str[i];
str[i] = str[j];//写入位置时发生冲突
str[j] = tmp;
}
return str;
}

分析:

程序代码区:

 1 //main.cpp2 int a=0;    //全局初始化区3 char *p1; //全局未初始化区4 main()5 {6     int b;                  //栈7     char s[]="abc";  //栈8     char *p2;           //栈9     char *p3="123456";   //123456\0在常量区,p3在栈上。
10     static int c=0;     //全局(静态)初始化区
11     p1 = (char*)malloc(10);
12     p2 = (char*)malloc(20);   //分配得来得10和20字节的区域就在堆区。
13     strcpy(p1,"123456");   //123456\0放在常量区,编译器可能会将它与p3所向"123456"优化成一个地方。
14 }

存取效率的比较

char s1[]="aaaaaaaaaaaaaaa";
char *s2="bbbbbbbbbbbbbbbbb";
aaaaaaaaaaa是在运行时刻赋值的;而bbbbbbbbbbb是在编译时就确定的;但是,在以后的存取中,在栈上的数组比指针所指向的字符串(例如堆)快。

form:http://blog.csdn.net/pipisorry/article/details/37610401

ref:

C++链接和运行相关错误相关推荐

  1. Scrapy运行中常见网络相关错误

    错误类型 错误名称 defer.TimeoutError 当延迟超时时,默认情况下会引发此错误(链接) TimeoutError 用户超时导致连接失败 DNSLookupError DNS查找失败 C ...

  2. Power BI中配置Python运行环境,及相关错误问题解决

    Power BI Desktop中支持python,在Power BI的数据获取.数据转换.数据可视化.数据输出的全流程中,都可以支持使用Python.关于如何全流程使用Python,可以参见文章ht ...

  3. LR运行常见错误解决办法

    LR运行常见错误解决办法  一.Step download timeout (120 seconds) 这是一个经常会遇到的问题,解决得办法走以下步骤: 1.修改run time setting中的请 ...

  4. 链接/装载/运行(3)-目标文件内容解析

    声明:此内容是阅读<程序员的自我修养–链接,运行与库>而整理的学习笔记. 1 范例解析 1.1代码 /* SimpleSection.c** Linux: gcc -c SimpleSec ...

  5. 在DOS环境下win7系统与win10系统的编程、链接及运行步骤(非常适合第一次学习DOS的小萌新入手)

    文中如有不足或错误之处,欢迎大家指正! 任务:编写一个简单的汇编程序(在屏幕上打印 Hello World!),使该程序能够链接.运行,最终得到正确结果. win7和win10编程时对应的资料放在以下 ...

  6. 【解决】MySql 5.6 运行崩溃错误

    [解决]MySql 5.6 运行崩溃错误 最近弄了一台云主机,配置是20G磁盘空间,1G运行内存的Linux服务器.在上面安装了LAMP(RHEL7.2+Apache2.4+MySql5.6+PHP5 ...

  7. PHP中间件ICE,ICE的安装配置,ICE常见编译和运行(异常)错误(自测Php版本安装部分,因为php版本跟ice版本不一样失败)

    ICE(Internet Communications Engine)是Zeroc提供的一款高性能的中间件.使用ICE能使得php(或c++,java,python)与java,c++,.net,py ...

  8. 链接脚本lds 相关的知识

    链接脚本lds相关的知识 目录 链接脚本lds相关的知识 前言 关于vmlinux.lds目标的生成与构建 关于链接脚本的语法 sections 输出段 关于vmlinux.lds链接脚本的解读 参考 ...

  9. C语言编译、链接和运行详解

    文章目录 1. 什么是编译 2. 什么是链接 3. 什么是运行 4. C 程序开发注意事项1 5. 如果想只生成目标 exe 文件,不想执行结果 6. 编译.链接和运行的流程 7. C 程序开发注意事 ...

  10. python链接DB2数据库相关问题(离线安装,pandas读取等)

    python链接DB2数据库相关问题(离线安装,pandas链接等) 由于单位内网无法链接网络,所以在安装完anaconda后,只能手动离线安装db2的包:ibm_db 一.离线安装ibm_db: 参 ...

最新文章

  1. Windows 2008 r2域更名
  2. java实现倒计时闹钟_js带闹铃功能的倒计时代码
  3. java 手势识别_java – 如何在Android中实现手势识别
  4. 使用HTML文件作为中转生成WORD文档
  5. leetcode89 (2022.1.8)
  6. java 冒泡算法_关于java中的冒泡算法
  7. js 实现pdf在线阅读
  8. CheckMarx源代码安全测试工具
  9. mac OS系统中 设置ssh连接端口
  10. 2022最新阿里P6+Java技术体系图
  11. 解决chrome浏览器应用商店排版混乱问题
  12. 热修复(一)原理与实现详解
  13. 【C++】 STL库的stack容器
  14. 人脸识别(二) 人脸1V1,PK明星脸
  15. PyQt(Python+Qt)学习随笔:QListView的itemAlignment属性
  16. win10 ,在任务栏上,设置快速启动栏
  17. 东南大学计算机学院通知,2020下半年江苏东南大学计算机等级考试报名通知
  18. Kubernetes存储之Heketi管理GlusterFS
  19. OpenLayers5在EPSG:4326下以m为单位画圆
  20. 10个美妙的Python装饰器

热门文章

  1. Attributes(2): Displaying attributes for a class.(显示类属性)
  2. GridView实现CheckBox全选
  3. PaddlePaddle(5)——简单高效的部署与推理方法(Ⅱ)
  4. Java collection 集合类架构
  5. hread.interrupt()到底意味着什么
  6. MacOS平台上编译 hadoop 3.1.2 源码
  7. Node.js Unix/Linux NVM
  8. ES6 class继承
  9. Beta阶段第三次网络会议
  10. 实践中 XunSearch(讯搜)更新索引方案对比