原因:编译的release版本,在XP下运行报错误“无法定位程序输入点InitializeCriticalSectionEx
于动态链接库kernel32dll”。
解决步骤:
1、请先升级到最新Update4。
2、将工程(包括用到的DLL工程也需设置)做如下设置:
项目——属性——配置属性——常规——平台工具集——Visual
Studio
2012
-
Windows
XP
(v110_xp)
项目——属性——配置属性——常规——MFC的使用——在静态库中使用
MFC。
项目——属性——配置属性——常规——ATL的使用——静态链接到
ATL。
平台工具集,必须设置。MFC的使用、ATL的使用结合具体情况。Release版一般设为静态。
对计算机软件的维护主要有以下几点:
(1)对所有的系统软件要做备份。当遇到异常情况或某种偶然原因,可能会破坏系统软件,此时就需要重新安装软件系统,如果没有备份的系统软件,将使计算机难以恢复工作。
(2)对重要的应用程序和数据也应该做备份。
(3)经常注意清理磁盘上无用的文件,以有效地利用磁盘空间。
(4)避免进行非法的软件复制。
(5)经常检测,防止计算机传染上病毒。
(6)为保证计算机正常工作,在必要时利用软件工具对系统区进行保护。
总之,计算机的使用是与维护分不开的,既要注意硬件的维护,又要注意软件的维护。
方法如下:
在C源码中,定义一个全局变量,将此变量放到一个自定义的section中。
然后,在链接程序时,通过一个链接选项,指定此自定义section的地址,就达到目的了。
下面是示例程序
[cpp] view plain copy
/ link_testc /
#include <stdioh>
#include <errnoh>
char a[10241024] __attribute__ ((section ("my_test_section"))) =
"a ha ha ha, i was located at a fixed address!";
int main(int argc, char argv[])
{
printf("&a=%p\n", a);
printf("%s\n", a);
return 0;
}
编译及运行效果(Linux X86_64环境)。
注意,由于这里是通过gcc调用ld完成链接,因此需要通过-Xlinker将链接选项--section-start=my_test_section=0x700000传递给最终的ld
[plain] view plain copy
[root@localhost ~]# gcc -Xlinker --section-start=my_test_section=0x700000 link_testc
[root@localhost ~]# /aout
&a=0x700000
a ha ha ha, i was located at a fixed address!
1 ARM汇编文件格式
扩展名为 s
ARM汇编语言是以section为单位来组织源文件的。
Section是相对独立的,具有特定名称,不可分割的指令,或数据序列。
Section分为:
code section -- 存放执行代码。
data section -- 存放代码运行时所需的data
一个ARM源程序至少需要一个code section。
大的程序:可以包含多个 code section / data section
GNU环境:
global _start
text
_start:
mov r0,#10
mov r1,#3
add r0,r0,r1
end
2 汇编语言语句格式
GNU ARM汇编 - (5) - 路雷米 - 路雷米的博客
F/B : 用于指示编译器向前/向后搜索。
3 C与ARM汇编程序间的相互调用
ATPCS -- ARM-Thumb Procedure Call Standard(ARM-Thumb子程序调用标准)
定义了单独编译的C程序和ARM/Thumb汇编之间,互相调用的规则。
section指的“部分”是不同质的,如:The TOEFL is divided into three sectiond,namely listening,structure and reading在这里托福考试是由三部分组成的,这三部分是不一样的,即不同质的。而segment指的“部分”是同质的,如:I want the middle segment of the rope我想要中间那段绳子,其实绳子的任何段都是一样的,即同质的。
常量是一个命名的数据项,在整个 *** 作过程中其值保持不变。如PI值,即3.1415926535是数值型常量。 VFP定义了如下类型的常量:
数值型常量,如:20,16,100,1
字符型常量,用单引号或双引号括起来的字符串,如:"ABCD"
逻辑型常量,只有两种:T和F.
日期型常量和日期时间型常量,如:{^1999-04-22},{^1999-04-24 10:00am}
关键的是,常量和变量是放在不同的"段"(section)里,程序一旦加载,常量/变量自然都在内存里了。
常量和全程变量,通常放在初始化段;局部变量,通常在栈里;
还有一种情况,比如汇编里的立即数(mov ax, 12),它是直接放在指令里的,也即是代码段里
由上面,我们可以知道,常量是在程序加载的时候,一起加载到内存中去的,这个时候是要占用内存资源的。。。
《联合国国际海洋法公约》本身没有强制执行的法律效力,它必须和国内法联合起来才有,比如海事法院在办理船舶损害赔偿、海洋污染损害赔偿等案件时,会引用《联合国国际海洋法公约》和国内法,然后做出判决,最后是法院的生效判决有强制执行的法律效力。
以上就是关于无法定位InitializeCriticalSectionEx程序输入点于动态链接库kernel32.dll上.全部的内容,包括:无法定位InitializeCriticalSectionEx程序输入点于动态链接库kernel32.dll上.、如何在程序中预留一段固定的虚拟地址空间、arm汇编语言以什么为单位组织源文件等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)