visual studio 2008 编译项目出现层次不穷问题枚举

文章目录

  • 1、严重性 代码 说明 项目 文件 行 禁止显示状态 错误 C1047 对象或库文件“.lib”是使用与其他对象(如“x64\Release\main.obj”)不同的
      • 1、错误原因
  • 2、意外的预编译头错误,只需重新运行编译器就可能修复此问题
  • 3、 warning LNK4099: 未找到 PDB“vc90.pdb”(使用“../../lib\SafeStored.lib”或在“f:\sdologin_code\trunk\bin\Debug\pdb\vc90.pdb”中寻找);正在链接对象,如同没有调试信息一样
  • 4、VS2008中编译通过,但调试时出现“未使用调试信息生成二进制文件”的问题

1、严重性 代码 说明 项目 文件 行 禁止显示状态 错误 C1047 对象或库文件“.lib”是使用与其他对象(如“x64\Release\main.obj”)不同的

严重性 代码 说明 项目 文件 行 禁止显示状态
错误 C1047 对象或库文件“.\lib\SceneTempCal.lib”是使用与其他对象(如“x64\Release\main.obj”)不同的编译器版本创建的;请使用相同的编译器重新生成所有对象和库 SceneTest E:\osg\work\ThermalCharacteristics_20220628\SceneTest\LINK 1
在这里插入图片描述

1、错误原因

VS2019 或者其他编译器VS2008开发,之前一直用的Debug模式,代码编译正常

最近改为Release模式,一编译就出现这个错误:

LINK : fatal error C1047: 对象或库文件“.lib”是使用与其他对象(如“x64\Release\main.obj”)不同的编译器版本创建的;请使用相同的编译器重新生成所有对象和库

网上搜了一下,说是:

“我这几天也遇到了这个问题,用别人提供的lib,在vs2019下 debug模式可以运行,但release模式下就不行,出现了和你一样的错误。开始我还以为是lib不兼容,最后发现这个lib在LTCG下不能被解析,做如下改正即可:

Release模式下->配置属性->高级->全程序优化->使用链接时间代码生成 将这里的默认项 “使用链接时间代码生成”改为“无全程序优化”。 接下来就可以运行了。
在这里插入图片描述
在这里插入图片描述

一般低版本生成的lib都是可以被高版本编译器所用的,这个是兼容性的基础,呵呵!”

于是 改属性吧,改为 无全程序优化后,会报个另一个错,心想不能这么一直搞下去啊,肯定是哪不去了。

升级后重编译 也提示这个错,

但是这一次 属性里去掉无全程序优化后 再编译就通过了。

搞不懂,一个lib库 编译起来怎么还有这种情况?

属性->常规->项目默认值->全程序优化 将这里的默认项 “使用链接时间代码生成”改为“无全程序优化”。

这样设置后很多同学貌似解决了这个问题 ,然而并木有包括我。。。

记录一下,但是呢又出现了后面问题。

编译会提示新的错误:
fatal error C1900: “P1”(第“20081201”版)和“P2”(第“20070207”版)之间 Il 不匹配
。。。。。。。。。。。。。。。

继续。。。

原因:链接时使用了某些用更新的编译器编译的LTCG(Link Time Code Generation)的library。之所以x86是正常的,是因为很巧链接时使用的x86 lib是普通lib,而amd64 lib是LTCG lib。

说实话看不懂这是啥库。

解决方案两种:

  • 1)更新当前使用的编译链接工具,使其与lib匹配。当然,这样编译出来的二进制文件可能会有所改变(优化可能不同),所以可能需要重新测试。
  • 2)使用不带LTCG的library

说了等于没说,而且我觉得我这情况也不一样,因为在另外一台机器上编译是OK的。

后来我自己解决方法是下载:vs2008出现这样的错误是由于版本没有升级,在官网下载了一个升级包vs2008sp1,安装后程序运行正确。

这时我才意识到,所用的.lib库是在一个升级版的vs2008上编译得到的,至于在releasedebug模式下出现的错误不一致,我就不明白了。

既然这个lib库是在vs2008上编译的,vs2010应该是可以兼容使用的,我又检查了最开始在vs2010下运行的这个程序的配置,是在release模式下运行的,我改为debug模式运行后正确,检查了releasedebug的配置,发现“项目->属性->配置属性->常规->全程序优化” 在两个模式下不同,将这个选项改为 “无全程序优化”,之后程序就可以在两种模式下正常运行了。

通过这次调试得到一个结论,引用别人lib或者dll的时候,出现连接问题一般都是由于当前编译器版本过低,向上无法兼容;另外一些原因是编译器的设置问题,导致无法正确解析库文件。

vs2008中文 sp1版本下载地址:sp1中文版地址。

vs2008 英文sp1版本下载地址:sp1英文版地址。

2、意外的预编译头错误,只需重新运行编译器就可能修复此问题

昨天还好好的,今天打开vs2008,莫名就出现“意外的预编译头错误,只需重新运行编译器就可能修复此问题”。清理,重新编译,不行;重启编译器,清理,重新编译,还不行;最后试试,重启电脑,打开工程,清理,重新编译,又可以了。

官方给的解决方法:

  • 方法 1:

    • 禁用/analyze编译器选项,则它会被启用。
  • 方法 2:

    • 开始清理生成。
  • 方法 3:

    • 重新启动计算机。
  • 方法 4:

  • 禁用创建/使用预编译头的编译器选项。

注意这些方法不能保证正常工作。即使您使用这些方法之一,您可能仍会遇到此问题。

我的解决方案,重启电脑…

3、 warning LNK4099: 未找到 PDB“vc90.pdb”(使用“…/…/lib\SafeStored.lib”或在“f:\sdologin_code\trunk\bin\Debug\pdb\vc90.pdb”中寻找);正在链接对象,如同没有调试信息一样

LNK4099警告通常表示编译器无法找到与您的项目相关的调试信息文件(.pdb文件)。在您的情况下,它正在尝试查找名为"vc90.pdb"的文件。这个问题通常与编译器的调试信息生成设置有关。
在这里插入图片描述
当多个Project是分开编译的,主项目和子项目的pdb文件名相同(默认都是vc90.pdb或vc100.pdb)从而造成找不到调试信息,解决的办法是修改车险数据库文件名vc90.pdb为【项目名称.pdb】,如下所示:

一、在VS2008工程中,经常出现warning LNK4099: 未找到 PDB“vc90.pdb等问题,解决办法如下:

  1. 在项目属性—C/C++—输出文件—程序数据库文件名后面填写$(IntDir)\vc80.pdb。

  2. 在项目属性—连接器—调试—生成调试信息后面改成“否”。

举例: “warning LNK4099: 未找到 PDB“vc120.pdb”(使用“sqlite3d.lib(sqlite3secure.obj)”或在“D:\test\Debug\vc120.pdb”中寻找);正在链接对象,如同没有调试信息一样”。

使用VC时链接了第三方静态库, 并且第三方静态库(一般是开源的三方库)是在一个solution下的多个project, 当然,

网上基本都是这么回答的, 其实本质原因是因为这些开源库一般都会通过各种方式修改solution和project的默认路径

把二进制生成到同一个目录下, 比如lib, 而我们自己平时简单的静态库工程是不怎么修改默认工程配置的.由于每个

开源库的作者有自己的工程组织方式, 但导致LNK4099的最终原因无非是PDB路径问题。

解决方案

  • a. 如果确认不需要PDB, 即不需要调试开源库, 完全可以在设置里将/Zi或/ZI去掉, 这样即能消除warning也能提升开源库编译速度 。

  • b. 如果需要调试开源库, 方法也不复杂

    • b.1. 将开源库project里的C/C+±>General->Debug Information Format 设置为Zi或ZI(两者区别请自行google, Zi就够用了, 只是高版本的VS默认都是ZI)
    • b.2. 然后在C/C+±>Output Files->Pragram Database File Name 设置为(OutDir)(OutDir)(TargetName).pdb, (有些2B开源库这里设置的跟VS默认的是一样的比如(IntDir)vc(IntDir)vc(PlatformToolsetVersion).pdb, 但把IntDir改成了同一个目录, 每个project生成出来的pdb名字路径都是一致的, 当然就会出问题), 这里需要注意的是, 一定要确保(OutDir)(OutDir)(TargetName)是有意义的, 个别开源库完全不用vs自带的宏, 甚至个别开源库需要configure之后才生产vc project, 甚至是绝对路径, 但你所要确保的是, 目录必须跟生成的.lib是同一个, 文件名(不包括扩展名)必须是和生成的xxx.lib的xxx是一致的. 之后你要做的就是把每个project的debug&release都按照如上改好再编译就ok了。

4、VS2008中编译通过,但调试时出现“未使用调试信息生成二进制文件”的问题

Debug模式,运行时完全正常,但是一调试就出现对话框,显示出错信息:

“无法找到“XXX.exe”的调试信息,或者调试信息不匹配。未使用调试信息生成二进制文件。”

VC项目是空项目。发现其他的项目都可以调试,就“空项目”不行。

解决方法:

首先打开菜单 项目->项目属性页

  • 1。选择 配置属性->链接器->调试->生成调试信息 改为 是 。
  • 2。选择 配置属性->C/C++ ->常规->调试信息格式 改为 用于“编辑并继续”的程序数据库(/ZI) 。
  • 3。选择 配置属性->C/C++ ->优化->优化 改为 禁用(/Od) 。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/122368.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

微信小程序案例2-1:学生信息

文章目录 一、运行效果二、涉及知识点(一)常用组件1、view组件2、image组件 (二)rpx单位1、什么rpx单位2、rpx与px相互换算 三、实现步骤(一)创建项目(二)准备图像素材(三…

测试需求分析

什么是软件测试需求: 灰度测试:先发布部分功能,然后看用户的反馈,再去发布另外一部分的更新 A/B测试:先发布的功能先让A部分的用户进行更新,再根据用户的犯困再更新B用户的功能 需求测试: 功…

Nginx从安装到使用,反向代理,负载均衡

什么是Nginx? 文章目录 什么是Nginx?1、Nginx概述1.1、Nginx介绍1.2、Nginx下载和安装1.3、Nginx目录结构 2、Nginx命令2.1、查看版本2.2、检查配置文件正确性2.3、启动和停止2.4、重新加载配置文件2.5、环境变量的配置 3、Nginx配置文件结构4、Nginx具体…

Spring依赖注入

Spring两大特性:IOC控制反转、AOP面向切面编程。 IOC:控制反转,把创建对象的过程交给 Spring 进行管理(DI:依赖注入,在IoC容器内将有依赖关系的bean进行关系绑定。成员变量有两种注入方式:set注…

华为云云服务器评测|云耀云服务器L实例快速部署MySQL使用指南

文章目录 前言云耀云服务器L实例介绍什么是云耀云服务器L实例?产品优势智能不卡顿价优随心用上手更简单管理更省心 快速购买查看优惠卷购买 安装MySQL重置密码安装更新apt的软件源列表安装MySQL 设置用户名、密码、权限配置安全组 总结 前言 哈喽大家好&#xff0c…

Xcode,swift:Error Domain=kCLErrorDomain Code=1 (null)问题解决

问题描述: iOS开发时,当使用用户的位置权限时,获取用户经纬度报错:Error DomainkCLErrorDomain Code1 "(null)",错误域kCLError域代码1“(null)” 解决方法: 打开模拟机的设置-通用-语言与地区 将地区设置为中国(如果你的开发位置在中国的话) 点击左上方Features,选择…

ES6中的箭头函数(arrow function)与普通函数的不同之处

聚沙成塔每天进步一点点 ⭐ 专栏简介⭐ 语法简洁⭐ 没有自己的this⭐ 写在最后 ⭐ 专栏简介 前端入门之旅:探索Web开发的奇妙世界 记得点击上方或者右侧链接订阅本专栏哦 几何带你启航前端之旅 欢迎来到前端入门之旅!这个专栏是为那些对Web开发感兴趣、…

2605. 从两个数字数组里生成最小数字

文章目录 Tag题目来源题目解读解题思路方法一:枚举比较法方法二:集合的位运算表示法 写在最后 Tag 【贪心】【位运算】【数组】 题目来源 2605. 从两个数字数组里生成最小数字 题目解读 给定两个各自只包含数字 1 到 9 的两个数组,每个数组…

一日一技:Python如何同时调用多个GPT的API?

相信很多同学或多或少都在Python中使用过GPT API,通过Python安装openai库,来调用GPT模型。 OpenAI官方文档中给出了一个示例,如下图所示: OpenAI API 测试 如果你只有一个API账号,那么你可能不觉得这样写有什么问题。…

国内首个侧重能源金融交易的中国社科院-美国杜兰大学能源管理硕士

国内首个侧重能源金融交易的中国社科院-美国杜兰大学能源管理硕士 作为国内首个且唯一侧重能源金融交易的硕士项目,中国社科院与美国杜兰大学合作举办的能源管理硕士(Master of Management in Energy)项目旨在培养具备国际视野的高级能源金融…

网络协议从入门到底层原理学习(二)—— Mac地址/IP地址

文章目录 网络协议从入门到底层原理学习(二)—— Mac地址/IP地址1、MAC地址2、MAC地址的表示格式3、MAC地址表4、MAC地址操作5、MAC地址的获取6、ARP7、ICMP8、IP地址9、IP地址的分类和格式10、不同分类的IP地址的范围11、特殊 IP 地址12、子网掩码13、子…

Elasticsearch,Logstash和Kibana安装部署(ELK Stack)

前言 当今数字化时代,信息的快速增长使得各类组织和企业面临着海量数据的处理和分析挑战。在这样的背景下,ELK Stack(Elasticsearch、Logstash 和 Kibana)作为一套强大的开源工具组合,成为了解决数据管理、搜索和可视…

【电压质量】提高隔离电源系统的电压质量(Simulink实现)

💥💥💞💞欢迎来到本博客❤️❤️💥💥 🏆博主优势:🌞🌞🌞博客内容尽量做到思维缜密,逻辑清晰,为了方便读者。 ⛳️座右铭&a…

使用rabbitmq进行支付之后的消息通知

订单服务完成支付后将支付结果发给每一个与订单服务对接的微服务,订单服务将消息发给交换机,由交换机广播消息,每个订阅消息的微服务都可以接收到支付结果. 微服务收到支付结果根据订单的类型去更新自己的业务数据。 相关技术方案 使用消息…

leetcode172. 阶乘后的零(java)

阶乘后的零 题目描述巧妙的解法代码演示 上期经典 题目描述 难度 - 中等 172. 阶乘后的零 给定一个整数 n ,返回 n! 结果中尾随零的数量。 提示 n! n * (n - 1) * (n - 2) * … * 3 * 2 * 1 示例 1: 输入:n 3 输出:0 解释&#…

【计算机基础】Git从安装到使用,详细每一步!扩展Github\Gitlab

📢:如果你也对机器人、人工智能感兴趣,看来我们志同道合✨ 📢:不妨浏览一下我的博客主页【https://blog.csdn.net/weixin_51244852】 📢:文章若有幸对你有帮助,可点赞 👍…

面试题速记:JavaScript有哪些数据类型,它们的区别是?

JavaScript有哪些数据类型,它们的区别? JavaScript共有八种数据类型,分别是 Undefined、Null、Boolean、Number、String、Object、Symbol、BigInt。 其中 Symbol 和 BigInt 是ES6 中新增的数据类型: ●Symbol 代表创建后独一无二…

《安富莱嵌入式周报》第321期:开源12导联便携心电仪,PCB AI设计,150M示波器差分探头,谷歌全栈环境IDX,微软在Excel推出Python

周报汇总地址:嵌入式周报 - uCOS & uCGUI & emWin & embOS & TouchGFX & ThreadX - 硬汉嵌入式论坛 - Powered by Discuz! 视频版: https://www.bilibili.com/video/BV1ju4y1D7A8/ 《安富莱嵌入式周报》第321期:开源12导…

机器学习笔记之最优化理论与方法(七)无约束优化问题——常用求解方法(上)

机器学习笔记之最优化理论与方法——基于无约束优化问题的常用求解方法[上] 引言总体介绍回顾:线搜索下降算法收敛速度的衡量方式线性收敛范围高阶收敛范围 二次终止性朴素算法:坐标轴交替下降法最速下降法(梯度下降法)梯度下降法的特点 针对最速下降法缺…

《vue3实战》运用push()方法实现电影评价系统的添加功能

目录 前言 电影评价系统的添加功能是什么? 电影评价系统的添加功能有什么作用? 一、push()方法是什么?它有什么作用? 含义: 作用: 二、功能实现 这段是添加开始时点击按钮使…