当前位置:首页 » 编程软件 » 版本编译后的时序告警

版本编译后的时序告警

发布时间: 2022-08-19 17:55:34

⑴ 本来这个代码之前可以运行,后面重装了C++后就不能运行了,编译后就有这个问题,求解

VC9编译的程序在没有装过VC9(确切的说是.Net Framework3.5)的机器上运行时,如果提示“由于应用程序配置不正确,应用程序未能启动。重新安装应用程序可能会纠正这个问题。”这个错误,那 么就说明该程序动态链接了VC9的运行时库,(如果还用到了MFC,那么可能动态链接了VC9的MFC库,同理还有ATL库),以及缺少对应的 manifest文件,程序在目标机器上没有找到这些库和配置文件,因此导致了这个错误。出现这种情况的VC9编译器可能存在3个版本,接下来分别阐明:
1、没有打过任何补丁的VS2008
该版本对应的CRT/MFC/ATL库的版本号为9.0.21022.8,这个版本号在后面 会用到。这个版本的程序部署比较简单,直接把VC安装目录下的redist目录(C:/Program Files/Microsoft Visual Studio 9.0/VC/redist)中需要的库以及对应的manifest文件拷贝到执行程序同目录下,这样程序到任何机器上都能够正常运行了。
2、打过SP1补丁的VS2008
打过该补丁后,系统中存在着两个版本的CRT/MFC/ATL库,版本号分别为 9.0.21022.8和9.0.30729.1,这导致了manifest文件中记录的版本号和实际库的版本号不一致(程序要求它们的版本号一致才能运 行)。这个版本的程序部署需要两个步骤,首先要使manifest文件中依赖项的版本号与实际库的版本号一致,均为9.0.30729.1,方法是在工程 设置中增加一个宏定义_BIND_TO_CURRENT_VCLIBS_VERSION,该宏定义于C:/Program Files/Microsoft Visual Studio 9.0/VC/include/crtassem.h文件中,然后重新编译程序。接下来还是将VC安装目录下的redist目录(C:/Program Files/Microsoft Visual Studio 9.0/VC/redist)中需要的库以及对应的manifest文件拷贝到执行程序同目录下,然后修改manifest文件中依赖项的版本号为 9.0.21022.8,这样使得程序误以为该目录下库的版本号为9.0.21022.8(实际上是9.0.30729.1版本),这样程序到任何机器上 都能够正常运行了。
3、打过SP1补丁与SP1 ATL 安全更新 (KB973675)的VS2008
这是最新的更新。在SP1补丁之后,微软又于近日发布了一个用于智能设备的 Microsoft Visual Studio 2008 Service Pack 1 ATL 安全更新 (KB973675), 该补丁又将CRT/MFC/ATL库的版本号升级,为9.0.30729.4148,这次升级比较好,manifest文件与库的版本号一致了,不像 SP1一样升级的不彻底。这样只需要在工程设置中增加一个宏定义_BIND_TO_CURRENT_VCLIBS_VERSION,接下来重新编译程序, 然后直接把VC安装目录下的redist目录中需要的库以及对应的manifest文件拷贝到执行程序同目录下,这样程序到任何机器上都能够正常运行了。
顺便提一下,如果不想在发布程序时带上这些库和manifest文件(如果没有必要的话),那么可以采用静态编译CRT和MFC,然后把manifest文件添加到资源中,这样编译出的程序只要一个exe就可以在任何机器上直接运行了。
参考文章:
1、“应用程序配置不正确,程序无法启动”的解决方法资料收集:
有的时候,你在Visual C++上面经过好几个月的辛勤努力,终于将程序编写完成并且测试完毕,然而当你试图在客户的发布机上运行刚写好的程序时,有可能会碰到类似下面的错误,操 作系统告诉你“由于应用程序配置不正确,应用程序未能启动。重新安装应用程序可能会纠正这个问题”.
一般情况下,这个问题都是由于程序不能找到所需要的C运行库(CRT)而引起的。

在Windows XP SP2以后,Windows引入了Side-by-Side执行的概念,这个概念本来是.NET提出来的,但是Windows后来将这个概念集成到操作系统层面上来了。大家都应该知道Dll Hell 的问题,为了解决Dll Hell 的问题,Side-By-Side提出不同版本的dll文件可以同时存在于同一个系统里面,而且依赖于不同版本dll的应用程序在运行的时候可以使用到它当初被编译生成的dll。前面的话,有点绕,举个例子:
1. 假定你编写了一个C++程序A,是使用MFC 8.0(这个版本是随着Visual Studio 2005)发布的。
2. 之后你的机器升级了Visual Studio的版本,从2005升级到2008,2008的MFC库是9.0版本的,这个时候你的操作系统里面安装了两个版本的MFC,分别是8.0和9.0。
3. 你在Visual Studio 2008编写了另外一个C++程序B,B依赖与MFC 9.0。
4. 如果你运行程序A的话,操作系统会将MFC 8.0加载到A的进程里面。
5. 如果你这时同时运行程序B,操作系统会将MFC 9.0加载到B的进程里面。这就是Side-by-side的执行概念。

操作系统之所以能够这样做,是因为它在加载程序A和B之前,除了查看PE格式里面A和B所依 赖的Dll信息,都会查看A和B的manifest文件。Manifest文件保存了Windows可执行文件(包括exe和dll文件)要运行起来的环 境设置信息,文件名一般是可执行文件的文件全名加上.manifest。例如notepad.exe的manifest文件就应该是 notepad.exe.manifest。例外有的程序将manifest文件直接嵌入到可执行文件的资源里面了,这也就是为什么有的时候你看不到程序 的manifest文件的原因。通常来说,一个manifest文件的内容如下(test.exe.manifest文件):

⑵ Quartus ii 下用Verilog编译成功后,为什么总有很多警告

不用care的
这些warning一些设置的东西,比如说pin分配,悬空管脚的约束,时序约束等。
当然你要是想学好,用好这个软件,你可以根据warning提示进行相关设置,然后重新编译,就可以消除的!

⑶ 用quartus ii 11.0编译quartus ii 9.0建立的工程后下载到fpga里出现异常

你好!
重新建立工程,拷贝源文件到新建文件中编译下载完成!
我的回答你还满意吗~~

⑷ Windows 10 20170编译版本带来了哪些变化

电脑已经成为了人们日常生活中不可缺少的生活工具,电脑所使用的场景也越来越普遍,人们对电脑性能的要求也越来越高。 Window10 20170翻译版本上线,然后很多人都想知道它有哪些变化。接下来小编带大家进行了解。


就这次更新小编个人看来这次更新还是可以的。不知道大家这次有什么看法。欢迎在下面留言评论。

⑸ 关于c++Builder XE英文版本编译问题

第一个问题:
\n 和 endl 表示回车。

第二个问题:
1、gets(str);
是从缓冲区中读取字符串,然后保存到数组str中直到遇到回车符,换行符不作为字符串的内容,读取的换行符会转换为NULL值,由此标志程序的结束。

2、cin.getline(char*line,int size,char ='"n')是读入一行字符,第二个参数是本次读取的最大字符个数,第三个参数是分隔字符,作为读取一行结束的标志,默认是\n。

3、cin.get()第一个用法,是读入一个字符。 cin.get()第二个用法,也是输入一行(同cin.getline()),但是区别就是,不输出分隔符

补充一下:
cin.getline() 与 cin>>str 的一个不同是,前者输入一行,行中可以包含空格,后者却以空格或回车作为字串结束,不包含空格。

补充:get() 和getline()的异同
1)相同点:
要获取一行的输入,标准流类的成员函数getline(),get()都有三个参数,比如getline(char*line,int size,char ='\n')。其中第一个参数指向存储结果字符的缓冲区指针,第二个表示缓冲区大小(本次读取的最大字符个数,不能够超过其限度),第三个表示知道什么时候停止读输入的终止符(读取一行结束的标志)。终止符有一个经常用到的缺省值"\n"。两个函数遇到输入终止符时,都把零储存在结果缓冲区里。
2)不同点:
1.一般来讲,get()一次读入一个字符,getline()一次读入一行字符
2.在处理字符串时,get()遇到输入流的分隔符时就停止,而不从输入流中提取分隔符。比如用cin.get(myarray1,20,'*'); 处理字符串1111*2222,碰到*就停止。cout<<myarray1;会输出1111。然后再调用cin.get(ch1),cout<<ch1;输出的还是这个分隔符*。getline()与其相反,它从输入流中提取分隔符,但仍没有把它储存在结果缓冲区里。如果用cin.getline(myarray2,20,'*');处理上面同样的字符串1111*2222,碰到*停止。 cout<<myarray2;会输出1111。然后再调用cin.get(ch2),cout<<ch2;输出的是分隔符后面的2。

3)代码演示:
#include <iostream>
#include <iomanip>
using namespace std;

void main()
{
char myarray1[20],myarray2[20];
cin.get(myarray1,20,'*');
cout<<myarray1;
char ch1;
cin.get(ch1);
cout<<ch1;

cin.getline(myarray2,20,'*');
cout<<myarray2;
cin.get(ch1);
cout<<ch1;
}

4)read 函数和 write函数
最近开始从事搜索引擎的工作,所以又重新开始了c/c++的旅程,时隔4年
不得不复习一下c/c++其中的内容,以下内容有网上别的朋友发表的,也有我自己总结的.
1. read
#include
ssize_t read(int filedes, void *buf, size_t nbytes);

返回值:读取到的字节数;0(读到 EOF);-1(出错)
read 函数从 filedes 指定的已打开文件中读取 nbytes 字节到 buf 中。以下几种情况会导致读取到的字节数小于 nbytes :
A. 读取普通文件时,读到文件末尾还不够 nbytes 字节。例如:如果文件只有 30 字节,而我们想读取 100
字节,那么实际读到的只有 30 字节,read 函数返回 30 。此时再使用 read 函数作用于这个文件会导致 read 返回 0 。
B. 从终端设备(terminal device)读取时,一般情况下每次只能读取一行。
C. 从网络读取时,网络缓存可能导致读取的字节数小于 nbytes 字节。
D. 读取 pipe 或者 FIFO 时,pipe 或 FIFO 里的字节数可能小于 nbytes 。
E. 从面向记录(record-oriented)的设备读取时,某些面向记录的设备(如磁带)每次最多只能返回一个记录。
F. 在读取了部分数据时被信号中断。
读操作始于 cfo 。在成功返回之前,cfo 增加,增量为实际读取到的字节数。
2. write
#include
ssize_t write(int filedes, const void *buf, size_t nbytes);

返回值:写入文件的字节数(成功);-1(出错)
write 函数向 filedes 中写入 nbytes 字节数据,数据来源为 buf 。返回值一般总是等于 nbytes,否则就是出错了。常见的出错原因是磁盘空间满了或者超过了文件大小限制。
对于普通文件,写操作始于 cfo 。如果打开文件时使用了 O_APPEND,则每次写操作都将数据写入文件末尾。成功写入后,cfo 增加,增量为实际写入的字节数。
From : antigloss

⑹ 主板报警声

从网上找的,希望对你有帮助
1.拔掉音频线,如果没有噪音了,则是电脑声卡输出有问题
2.拔掉音频线如果还有,是音响自身问题
原因是音频放大回路的零漂引起。
有声音就代表是硬件了,那么在转动的硬件是那些呢?主要就是风扇了,看看显卡、CPU等的风扇是否正常吧
4.有些木马是利用Rundll32.exe加载DLL形式运行的,但大多数情况下Rundll32.exe都是加载系统的DLL文件,不用太担心,如果用最新杀软扫描过应该没什么问题(现在SRENG2.5.16.900版本的诊断一般很准确).可以从查看硬件入手,另外我觉得您应该具体描述以下是怎响的:1、是否是在连网的状态下2、是否是在浏览网页的状态下3、开机多长时间开始响,频率如何4、进程的截图最好传个上来
BIOS告警。。。
请按照告警声与下面文章对照

BIOS告警声全版

1. AMI BIOS
1短--内存刷新失败
2短--内存ECC校验错误
3短--系统基本内存(第1个64K)检查失败
4短--系统时钟出错
5短--中央处理器(CPU)错误
6短--键盘控制器错误
7短--系统实模式错误,不能切换到保护模式
8短--显示内存错误(显示内存可能有所损坏)
9短--ROM BIOS检验和错误
1长3短--内存错误(内存损坏,请更换)
1长8短--显示测试错误(显示器数据线松动或显示卡没插稳)
2. Award BIOS
1短--系统正常启动
2短--常规错误,请进入CMOS SETUP重新设置不正确的选项
1长1短--RAM或主板出错
1长2短--显示错误(显示器或显示卡)
1长3短--键盘控制器错误
1长9短--主板FlashRAM或EPROM错误(BIOS损坏)
不断地响(长声)--内存没插稳或损坏
不停地响--电源、显示器和显示卡没有连接好
重复短响--电源故障
无声音无显示--电源故障
3. Phoenix BIOS
1短--系统正常启动
3短--系统加电自检初始化(POST)失败
1短1短2短--主板错误(主板损坏,请更换)
1短1短3短--主板电池没电或CMOS损坏
1短1短4短--ROM BIOS校验出错
1短2短1短--系统实时时钟有问题
1短2短2短--DMA通道初始化失败
1短2短3短--DMA通道页寄存器出错
1短3短1短--内存通道刷新错误(问题范围为所有的内存)
1短3短2短--基本内存出错(内存损坏或RAS设置错误)
1短3短3短--基本内存出错(很可能是DIMM槽上的内存损坏)
1短4短1短--基本内存某一地址出错
1短4短2短--系统基本内存(第1个64K)有奇偶校验错误
1短4短3短--EISA总线时序器错误
1短4短4短--EISA NMI口错误
2短1短1短--系统基本内存(第1个64K)检查失败
3短1短1短--第1个DMA控制器或寄存器出错
3短1短2短--第2个DMA控制器或寄存器出错
3短1短3短--主中断处理寄存器错误
3短1短4短--副中断处理寄存器错误
3短2短4短--键盘时钟有问题,在CMOS中重新设置成Not installed来跳过POST
3短3短4短--显示卡RAM出错或无RAM,不属于致命错误
3短4短2短--显示器数据线松了或显示卡没插稳或显示卡损坏
3短4短3短--未发现显示卡的ROM BIOS
4短2短1短--系统实时时钟错误
4短2短3短--键盘控制器(8042)中的Gate A20开关有错,BIOS不能切换到保护模式
4短2短4短--保护模式中断错误
4短3短1短--内存错误(内存损坏或RAS设置错误)
4短3短3短--系统第二时钟错误
4短3短4短--实时时钟错误
4短4短1短--串行口(COM口、鼠标口)故障
4短4短2短--并行口(LPT口、打印口)错误
4短4短3短--数学协处理器(8087、80287、80387、80487)出错

⑺ XILINX FPGA时序告警如何消除时序告警得分很高,但被告警的线都是些不重要的(不必分析的)。

false path
ignore
参见这2条约束

⑻ 错误 1 error C1853: “Debug\test.c.pch”预编译头文件来自编译器的早期版本,或者预编译头为 C++ 而在 C

告警信息里有说明,可能是你包含的头文件是不当前所使用编译器里的头文件。
检查一下头文件是不是当前所使用的编译器里的文件。

⑼ quartus全编译总是提示时序不满足

时序分析不满足当然时序仿真不会正确了呀,功能仿真是不计算逻辑单元与走线延时的,只能进行功能验证,时序仿真含有时序信息,说明你的设计没有遵循同步时序逻辑设计

⑽ 在高版本内核上编译的程序在低版本内核运行会崩溃

glibc主版本号。
而且编译的时候如果CGFLAGS和CXXFLAGS如果没有-g选项的话用gdb调试无法看到变量名,默认是提示有问题。

热点内容
津贴脚本 发布:2025-02-06 19:44:10 浏览:739
好分数里如何修改密码 发布:2025-02-06 19:42:30 浏览:155
mysql存储过程判断 发布:2025-02-06 19:40:15 浏览:853
bat编译器的作用 发布:2025-02-06 19:26:54 浏览:343
phpajaxsession 发布:2025-02-06 19:20:56 浏览:623
西安java学习 发布:2025-02-06 19:15:44 浏览:623
微信电影源码网站 发布:2025-02-06 18:55:21 浏览:934
本地建mysql数据库 发布:2025-02-06 18:54:23 浏览:762
屏幕看不清了如何输密码 发布:2025-02-06 18:51:14 浏览:333
手机开脚本买个什么配置的 发布:2025-02-06 18:45:59 浏览:113