当前位置:首页 » 编程软件 » 编译处理方案

编译处理方案

发布时间: 2022-07-27 15:32:49

A. Virsul Studio 2008中的生成解决方案、编译、生成文件、调试分别代表什么意思

解决方案可以理解为一系列项目的组合.
实际的软件通常由有很多文件组合工作而成,比如一个主EXE文件,若干个DLL文件和其他资源文件.
其中,EXE文件,DLL文件在VS2008里均叫做项目,解决一个小问题.这些项目组合起来工作,解决一个大课题,就成为VS2008里面说的解决方案.

通俗点理解,解决方案就是一个大文件夹,里面可以放很多小文件夹(项目).
用解决方案最大的好处是代码都放在一起,可以很容易的从一个地方复制到另一个地方,不用作任何重新配置即可重新编译----可能这不是全部,但我目前就体会到这点好处~

明白上面说的,生成ABC就不是问题了,是单独生成解决方案中的一个小项目(而不是整个解决方案)的意思

另:
生成解决方案: 编译解决方案中的所有内容
编译 : 把你写的文本格式代码转换成电脑(主要是CPU)可以识别的二进制指令
调试 : 在特殊的环境中运行你写的程序,如果程序中有错误,这个环境会中断程序,并给你指出来哪里有错.

B. VS编译解决方案时【签名时出错:密钥集不存在。】

最简单的方法,直接干掉签名文件,编译(如果通过),直接再强签名就行了,呵呵,经常这么干的,好运

C. 编译系统的过程

接收输入的编译任务;根据所述编译任务生成任务名;解析获得所述任务名对应的源代码;编译所述源代码,并输出所述编译任务的处理状态信息。上述技术方案中,通过接口平台接收编译任务,由接口平台以任务名形式发起编译请求,进行编译,简化了编译输入操作;处理状态信息,通过接口平台实时提供给客户端,简化了编译监控操作,大大节约了人力资源。

D. 编译程序的综合部分

综合阶段必须根据符号表和中间语言程序产生出目标程序,其主要工作包括代码优化、存储分配和代码生成。代码优化是通过重排和改变程序中的某些操作,以产生更加有效的目标程序。存储分配的任务是为程序和数据分配运行时的存储单元。代码生成的主要任务是产生与中间语言程序符等价的目标程序,顺序加工中间语言程序,并利用符号表和常数表中的信息生成一系列的汇编语言或机器语言指令。 编译过程分为分析和综合两个部分,并进一步划分为词法分析、语法分析、语义分析、代码优化、存储分配和代码生成等六个相继的逻辑步骤。这六个步骤只表示编译程序各部分之间的逻辑联系,而不是时间关系。编译过程既可以按照这六个逻辑步骤顺序地执行,也可以按照平行互锁方式去执行。在确定编译程序的具体结构时,常常分若干遍实现。对于源程序或中间语言程序,从头到尾扫视一次并实现所规定的工作称作一遍。每一遍可以完成一个或相连几个逻辑步骤的工作。例如,可以把词法分析作为第一遍;语法分析和语义分析作为第二遍;代码优化和存储分配作为第三遍;代码生成作为第四遍。反之,为了适应较小的存储空间或提高目标程序质量,也可以把一个逻辑步骤的工作分为几遍去执行。例如,代码优化可划分为代码优化准备工作和实际代码优化两遍进行。
一个编译程序是否分遍,以及如何分遍,根据具体情况而定。其判别标准可以是存储容量的大小、源语言的繁简、解题范围的宽窄,以及设计、编制人员的多少等。分遍的好处是各遍功能独立单纯、相互联系简单、逻辑结构清晰、优化准备工作充分。缺点是各遍之中不可避免地要有些重复的部分,而且遍和遍之间要有交接工作,因之增加了编译程序的长度和编译时间。
一遍编译程序是一种极端情况,整个编译程序同时驻留在内存,彼此之间采用调用转接方式连接在一起(图2)。当语法分析程序需要新符号时,它就调用词法分析程序;当它识别出某一语法结构时,它就调用语义分析程序。语义分析程序对识别出的结构进行语义检查,并调用“存储分配”和“代码生成”程序生成相应的目标语言指令。
随着程序设计语言在形式化、结构化、直观化和智能化等方面的发展,作为实现相应语言功能的编译程序,也正向自动程序设计的目标发展,以便提供理想的程序设计工具。
参考书目
陈火旺、钱家骅、孙永强编:《编译原理》,国防工业出版社,北京,1980。
A.V.Aho, Principles of Compiler Design,Addison Wes-ley, Reading, Massachusetts, 1977. 20世纪80年代以后,程序设计语言在形式化、结构化、直观化和智能化等方面有了长足的进步和发展,主要表现在两个方面:①随着程序设计理论和方法的发展,相继推出了一系列新型程序设计语言,如结构化程序设计语言、并发程序设计语言、分布式程序设计语言、函数式程序设计语言、智能化程序设计语言、面向对象程序设计语言等;②基于语法、语义和语用方面的研究成果,从不同的角度和层次上深刻地揭示了程序设计语言的内在规律和外在表现形式。与此相应地,作为实现程序设计语言重要手段之一的编译程序,在体系结构、设计思想、实现技术和处理内容等方面均有不同程度的发展、变化和扩充。另外,编译程序已作为实现编程的重要软件工具,被纳入到软件支援环境的基本层软件工具之中。因此,规划编译程序实现方案时,应从所处的具体软件支援环境出发,既要遵循整个环境的全局性要求和规定,又要精心考虑与其他诸层软件 工具之间的相互支援、配合和衔接关系。

E. linux 编译内核几个常见问题解决方法

第一次把自己编译的驱动模块加载进开发板,就出现问题,还好没花费多长时间,下面列举出现的问题及解决方案
1:出现insmod: error inserting 'hello.ko': -1 Invalid mole format
法一(网上的):是因为内核模块生成的环境与运行的环境不一致,用linux-2.6.27内核源代码生成的模块,可能就不能在linux-2.6.32.2内核的linux环境下加载,需要在linux-2.6.27内核的linux环境下加载。
a.执行 uname -r //查看内核版本
b.一般出错信息被记录在文件/var/log/messages中,执行下面命令看错误信息
# cat /var/log/messages |tail
若出现类似下面:
Jun 4 22:07:54 localhost kernel:hello: version magic '2.6.35.6-45.fc14.i686.PAE
' should be '2.6.35.13-92.fc14.i686.PAE'
则把 Makefile里的KDIR :=/lib/moles/2.6.35.6-45.fc14.i686.PAE/build1 改为
KDIR :=/lib/moles/2.6.35.13-92.fc14.i686.PAE/build1 //改成自己内核源码路径
(这里的build1是一个文件链接,链接到/usr/src/kernels/2.6.35.6-45.fc14.i686.PAE和13-92的)
然并卵,我的fedora 14 /usr/src/kernels下并没有2.6.35.13-92.fc14.i686.PAE,只有2.6.35.13-92.fc14.i686,虽然不知道两者有什么区别,但改成2.6.35.13-92.fc14.i686还是不行,照样这个问题,还好后来在看教学视频的到启发
法二:改的还是那个位置
KDIR :=/opt/FriendlyARM/linux-2.6.32.2 //把这里改成你编译生成kernel的那个路径
all:
$ (MAKE) -C $ (KDIR) M = $ (PWD) moles ARCH=arm CROSS_COMPILE=arm-linux- //加这句
2. [70685.298483] hello: mole license 'unspecified' taints kernel.
[70685.298673] Disabling lock debugging e to kernel taint
方法:在模块程序中加入: MODULE_LICENSE("GPL");
3. rmmod: chdir(2.6.32.2-FriendlyARM): No such file or directory 错误解决
方法:lsmod 可查看模块信息
即无法删除对应的模块。
就是必须在/lib/moles下建立错误提示的对应的目录((2.6.32.2)即可。
必须创建/lib/moles/2.6.32.2这样一个空目录,否则不能卸载ko模块.
# rmmod nls_cp936
rmmod: chdir(/lib/moles): No such file or directory
但是这样倒是可以卸载nls_cp936,不过会一直有这样一个提示:
rmmod: mole 'nls_cp936' not found
初步发现,原来这是编译kernel时使用make moles_install生成的一个目录,
但是经测试得知,rmmod: mole 'nls_cp936' not found来自于busybox,并不是来自kernel
1).创建/lib/moles/2.6.32.2空目录
2).使用如下源码生成rmmod命令,就可以没有任何提示的卸载ko模块了[luther.gliethttp]
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <fcntl.h>
#include <string.h>
#include <errno.h>
int main(int argc, char *argv[])
{
const char *modname = argv[1];
int ret = -1;
int maxtry = 10;
while (maxtry-- > 0) {
ret = delete_mole(modname, O_NONBLOCK | O_EXCL);//系统调用sys_delete_mole
if (ret < 0 && errno == EAGAIN)
usleep(500000);
else
break;
}
if (ret != 0)
printf("Unable to unload driver mole \"%s\": %s\n",
modname, strerror(errno));
}
3).把生成的命令复制到文件系统
# arm-linux-gcc -static -o rmmod rmmod.c
# arm-linux-strip -s rmmod
# cp rmmod /nfs/
cp /nfs/rmmod /sbin
代码如下:
proc.c
[html] view plain
<span style="font-size:18px;">#include <linux/mole.h>
#include <linux/kernel.h>
#include <linux/init.h>
#include <linux/proc_fs.h> /* Necessary because we use the proc fs */
#define procfs_name "proctest"

MODULE_LICENSE("GPL");
struct proc_dir_entry *Our_Proc_File;
int procfile_read(char *buffer,char **buffer_location,off_t offset, int buffer_length, int *eof, void *data)
{ int ret;
ret = sprintf(buffer, "HelloWorld!\n");
return ret;
}

int proc_init()
{ Our_Proc_File = create_proc_entry(procfs_name, 0644, NULL);
if (Our_Proc_File == NULL) {
remove_proc_entry(procfs_name, NULL);
printk(KERN_ALERT "Error: Could not initialize /proc/%s\n",procfs_name);
return -ENOMEM; }
Our_Proc_File->read_proc = procfile_read;//
// Our_Proc_File->owner = THIS_MODULE;
Our_Proc_File->mode = S_IFREG | S_IRUGO;
Our_Proc_File->uid = 0;
Our_Proc_File->gid = 0;
Our_Proc_File->size = 37;
printk("/proc/%s created\n", procfs_name);
return 0;
}
void proc_exit()
{ remove_proc_entry(procfs_name, NULL);
printk(KERN_INFO "/proc/%s removed\n", procfs_name);
}
mole_init(proc_init);
mole_exit(proc_exit);</span></span></span></span></span>
[html] view plain
<span style="font-size:18px;">

ifneq ($(KERNELRELEASE),)
obj-m :=proc.o
else
KDIR :=/opt/FriendlyARM/linux-2.6.32.2
#KDIR :=/lib/moles/2.6.35.13-92.fc14.i686.PAE/build1
PWD :=$(shell pwd)
all:
$(MAKE) -C $(KDIR) M=$(PWD) moles ARCH=arm CROSS_COMPILE=arm-linux-
clean:
rm -f *.ko *.o *.mod.o *.mod.c *.symvers
endif</span></span></span></span></span>
make后生成proc.ko,再在开发板上insmod proc.ko即可
执行 dmesg 就可以看到 产生的内核信息啦

F. c++编程技术问题 预编译处理

这种东西多用于调试,和C语言的if作用差不多
#if 0
int a[500] = {1,2,3};//这个数组不会被编译进程序
... //这段代码编译的时候不会参与编译
#else
int b[500] = {1,2,3} //这个会编译进程序
... //这段代码会参与编译
#endif
一般用于调试,更常用的方法是
#define DEBUG

#ifdef DEBUG
..... //调试符号定义了就执行调试的代码
#else
.....
#endif

G. 编程里面的调试,编译,链接,生成解决方案,执行这些都是什么意思呀,MVC,VC++,VS里面快捷键都是啥

编译,源代码(c/cpp)->目标文件(o/obj)
链接,目标文件->可执行文件(exe)/动态库文件(dll)
生成解决方案:一个解决方案可能包含不止一个可执行文件/动态库文件,生成解决方案会构建出解决方案下面所有的东西
执行:运行一个做好的exe文件
调试:在监视模式下运行,这种模式可以随时停止程序的执行,然后对照源代码查看变量,内存等,用于解决bug。
具体快捷键请自行熟悉所用的开发环境。

H. Visual Studio2008中的“编译”和“生成解决方案”有什么区别

编译过程将源程序转化为中间代码,它主要是检查语法和语义错误。在VS中,源程序包括用C++、C#、VB、J#等高级语言编写的代码,而中间代码是指MSIL汇编代码,这些代码能被CLR和WINDOWS操作系统进一步转化为机器指令。当然,在使用C++时,VS也是允许跳过编译为MSIL这一环节的,主要是为C++的灵活性和高效率考虑。值得注意的是,编译产生的这些中间代码是不能直接运行的,它们存储在DEBUG目录或者RELEASE目录下的.obj文件中,只有到了需要运行时,才由系统将他们和一些必要的系统API链接成可执行的文件。

生成解决方案实际上是一个傻瓜式的集成过程,它将编译和链接过程集成在一起,直接从源代码生成可执行文件。当然,内部机制还是上段所述,只不过方便了开发者。如果你在LINUX系统上进行C/C++开发的话,就会发现要运行一个比较大的程序并不是一件简单事,编译和连接过程对开发者来讲相对WINDOWS要“麻烦”许多。

热点内容
值班发布源码 发布:2024-10-25 19:23:50 浏览:369
php实现注册登陆 发布:2024-10-25 19:22:56 浏览:545
android开发库 发布:2024-10-25 18:50:28 浏览:231
优酷路由宝存储 发布:2024-10-25 18:41:37 浏览:934
pythoncmdb 发布:2024-10-25 18:41:29 浏览:200
安卓触控屏不灵怎么办 发布:2024-10-25 17:31:22 浏览:872
中信银行信用卡激活后密码是多少 发布:2024-10-25 17:28:31 浏览:506
cocos2d30编译 发布:2024-10-25 17:20:51 浏览:994
app直播平台源码 发布:2024-10-25 17:19:57 浏览:224
asp文件上传带进度条 发布:2024-10-25 17:19:54 浏览:659