导航:首页 > 源码编译 > 连接器编译器困难

连接器编译器困难

发布时间:2022-10-03 01:40:22

A. 编写一个 .c 文件 在 dos窗口下 调用vc6.0 的编译器和连接器 ,完成小程序,应该具体怎么做

messagebox()可能需要C++
写一个 ice.cpp 内容如下

#include <windows.h>#include <Winuser.h>
#pragma comment (lib, "User32.lib")main(){MessageBox(NULL,"Hello World",NULL,NULL);return 0; }

在DOS环境下编译链接命令
CL ice.cpp
就会得到 ice.exe
然后 打
ice.exe
就可运行。

详细的CL 用法,在DOS窗 打
CL /?
就有帮助文件出现。

B. Visual Unit 设定编译器和连接器

预先安装好VC,比如我安装的是Microsoft visual studio 2005.

再来,Visual Unit 4.0 安装,完成后,重新打开进入演示版。
在窗口的主界面,点击菜单栏“工程”-》“打开示例工程”,选择一个自己想打开的项目。
点击菜单栏“工具”-》“设定”。里面便有“编译器”和“编辑器”。

点击“编译器”,“名称”项,选择你安装VC对应的Visual C++ 版本,比如"Visual C++ 2005". 编译器和链接器,同样道理,选择之前你安装VC的根目录下,对应的编译器和链接器。比如:
“D:\Program files\Microsoft Visual Studio 2005\VC\bin\cl.exe”
“D:\Program files\Microsoft Visual Studio 2005\VC\bin\link.exe”。
这样便可以了。

如果项目执行测试,还是有类似编译器或者链接器的问题,请继续看以下注意事项,检查下工程属性是否一致:

待工程打开加载后,再次点击菜单栏“工程”-》“工程属性”,
在“常规”界面,选择你需要的测试代码编译器,比如我装的VC2005,那么我就选择Visual C++ 2005.

点击第五个tab "链接"。点击“环境变量”。在变量名下拉列表中,点击您安装VC的版本对应的dir,比如“vc2005_dir”. 在下面的“值”一栏,点击“浏览”找到VC对应的根目录。比如“D:/Program files/Microsoft Visual Studio 2005”。“OK”确认。再点击当前小窗口的“保存”。关闭小窗口。
退回到“工程属性”窗口,检查“库文件搜索目录”,是否是自己设定的vc2005_dir为头的目录,比如:“$(vc2005_dir)/vc/lib”.

其它地方比如“头文件”里的目录设置,亦是如此。不过只要你设置了一处的环境变量,其它地方也就会自动调用你设置的路径下的编译器了。

希望对你有帮助。:)

C. 每个编译器都不一样么 c语言一般用什么编译器 每次一种编译器不能编译 另一种却能编译出

编译器就是c语言编译成二进制的东西,
不同的编译器是不同的,
比如16位系统和32位系统的编译器就不同,因为16位的认为int是2字节,32位的则认为是4个字节。
另外
linux上的编译器跟windows下的编译器也不同,linux上的认为内核空间占1G,而windows下则认为占2G,
此外两个系统对环境变量以及其他的设置也不同所以编译器更不能用。
而且不同的CPU的指令集时不同的,所以同样int
a
=1
最后被编译成的二进制代码也是不同的。
C语言的编译器有很多,windows下的编译器也有很多,不同的编译器可能会做一些不同的优化,linux下的gcc也可以添加选项让他编译windows下运行的程序。
main(int
argc,char*argv[


argc
是你的参数个数
argv是你的参数。
比如你最终程序叫
add
那么
你在命令行执行add
1
2
那么argc
=3
第一个参数使你的add,
第二个第三个就是
1
2,
在函数内部你就可以获取这俩参数进行相加然后打印
visual
是个IDE,集成开发环境,已经集成好了windows下使用的编译器连接器
等,
编写代码完成后直接点击编译就行了。
IDE的默认编译器是可以更改的,不同的IDE设置不同。

D. 有关单片机编译器的问题

编译器,是将便于人编写,阅读,维护的高级计算机语言翻译为计算机能识别,运行的低级机器语言的程序。编译器将源程序(Source program)作为输入,翻译产生使用目标语言(Target language)的等价程序。源程序一般为高级语言(High-level language),如Pascal,C++等,而目标语言则是汇编语言或目标机器的目标代码(Object code),有时也称作机器代码(Machine code)。

一个现代编译器的主要工作流程如下:
源程序(source code)→预处理器(preprocessor)→编译器(compiler)→汇编程序(assembler)→目标程序(object code)→连接器(链接器,Linker)→可执行程序(executables])

可见,虽然高级语言都是c,但目标代码是基于机器平台的-c51,atmel,arm,motorola/freescale......同一个编译器也有针对不同平台的版本,如keil有arm的版本,icc也支持freescale.

E. codeblocks在运行时已经没有编译错误,但是运行不起来,老是停止工作,编译器显示如下

源文件.c-->通过编译器生成.o(目标文件)-->+通过连接器,调用库函数代码+删注释+外部函数价码--->生成可执行文件.exe;

从这个过程来讲,compiler编译器不知道,即缺失;手动添加就可以了。

如果编译没问题但是一运行就会自动弹出.exe已经停止工作也没显示代码有错误之类我是用CodeBlocks运行的运行结果如下:
Compiling:F:C++11.cpp
Linkingconsoleexecutable:F:C++11.exe
Processterminatedwithstatus0(0minutes,0seconds)
0errors,0warnings

Checkingforexistence:F:C++11.exe
Executing:D:ProgramFilesCodeBlocks/cb_console_runner.exe"F:C++11.exe"(inF:C++1)
Processterminatedwithstatus-1073741819(0minutes,4seconds)

F. vc6.0 编译器在编译文件的时候老卡住

呵呵,你的操作系统肯定不是正版,如果是正版就肯定不会有这样的问题的。我也是一样,只能用任务管理器强制关掉了。

G. Linux嵌入式交叉编译工具链问题 浅谈

简介

交叉编译工具链是一个由编译器、连接器和解释器组成的综合开发环境,交叉编译工具链主要由binutils、gcc和glibc 3个部分组成。有时出于减小libc库大小的考虑,也可以用别的c库来代替glibc,例如uClibc、dietlibc和newlib。交叉编译工具链主要包括针对目标系统的编译器gcc、目标系统的二进制工具binutils、目标系统的标准c库glibc和目标系统的Linux内核头文件。第一个步骤就是确定目标平台。每个目标平台都有一个明确的格式,这些信息用于在构建过程中识别要使用的不同工具的正确版本。因此,当在一个特定目标机下运行GCC时,GCC便在目录路径中查找包含该目标规范的应用程序路径。GNU的目标规范格式为CPU-PLATFORM-OS。例如,建立基于ARM平台的交叉工具链,目标平台名为arm-linux-gnu。

交叉编译工具链的制作方法

  1. 分步编译和安装交叉编译工具链所需要的库和源代码,最终生成交叉编译工具链。

  2. 通过Crosstool脚本工具来实现一次编译生成交叉编译工具链。

  3. 直接通过网上(ftp.arm.kernel.org.uk)下载已经制作好的交叉编译工具链。

方法1相对比较困难,适合想深入学习构建交叉工具链的读者。如果只是想使用交叉工具链,建议使用方法2或方法3构建交叉工具链。方法3的优点不用多说,当然是简单省事,但与此同时该方法有一定的弊端就是局限性太大,因为毕竟是别人构建好的,也就是固定的没有灵活性,所以构建所用的库以及编译器的版本也许并不适合你要编译的程序,同时也许会在使用时出现许多莫名的错误,建议你慎用此方法。


方法1:分步构建交叉编译工具链


  1. 下载所需的源代码包

  2. 建立工作目录

  3. 建立环境变量

  4. 编译、安装Binutils

  5. 获取内核头文件

  6. 编译gcc的辅助编译器

  7. 编译生成glibc库

  8. 编译生成完整的gcc

由于在问答中的篇幅,我不能细述具体的步骤,兴趣的同学请自行阅读开源共创协议的《Linux from scratch》,网址是:linuxfromscratch dot org


方法2:用Crosstool工具构建交叉工具链(推荐)

Crosstool是一组脚本工具集,可构建和测试不同版本的gcc和glibc,用于那些支持glibc的体系结构。它也是一个开源项目,下载地址是kegel dot com/crosstool。用Crosstool构建交叉工具链要比上述的分步编译容易得多,并且也方便许多,对于仅仅为了工作需要构建交叉编译工具链的你,建议使用此方法。

运行which makeinfo,如果不能找见该命令,在解压texinfo-4.11.tar.bz2,进入texinfo-4.11目录,执行./configure&&make&&make install完成makeinfo工具的安装

下载所需资源文件linux-2.4.20.tar.gz、binutils-2.19.tar.bz2、gcc-3.3.6.tar.gz、glibc- 2.3.2.tar.gz、glibc-linuxthreads-2.3.2.tar.gz和gdb-6.5.tar.bz2。然后将这些工具包文件放在新建的$HOME/downloads目录下,最后在$HOME/目录下解压crosstool-0.43.tar.gz,命

令如下:
#cd$HOME/
#tar–xvzfcrosstool-0.43.tar.gz

接着需要建立自己的编译脚本,起名为arm.sh,为了简化编写arm.sh,寻找一个最接近的脚本文件demo-arm.sh作为模板,然后将该脚本的内容复制到arm.sh,修改arm.sh脚本,具体操作如下:

# cd crosstool-0.43

# cp demo-arm.sh arm.sh

# vi arm.sh

修改后的arm.sh脚本内容如下:

#!/bin/sh
set-ex
TARBALLS_DIR=$HOME/downloads#定义工具链源码所存放位置。
RESULT_TOP=$HOME/arm-bin#定义工具链的安装目录
exportTARBALLS_DIRRESULT_TOP
GCC_LANGUAGES="c,c++"#定义支持C,C++语言
exportGCC_LANGUAGES
#创建/opt/crosstool目录
mkdir-p$RESULT_TOP
#编译工具链,该过程需要数小时完成。
eval'catarm.datgcc-3.3.6-glibc-2.3.2.dat'shall.sh--notest
echoDone.

在arm.sh脚本文件中需要注意arm-xscale.dat和gcc-3.3.6-glibc-2.3.2.dat两个文件,这两个文件是作为Crosstool的编译的配置文件。其中arm.dat文件内容如下,主要用于定义配置文件、定义生成编译工具链的名称以及定义编译选项等。

KERNELCONFIG='pwd'/arm.config#内核的配置
TARGET=arm-linux#编译生成的工具链名称
TARGET_CFLAGS="-O"#编译选项


gcc-3.3.6-glibc-2.3.2.dat文件内容如下,该文件主要定义编译过程中所需要的库以及它定义的版本,如果在编译过程中发现有些库不存在时,Crosstool会自动在相关网站上下载,该工具在这点上相对比较智能,也非常有用。

BINUTILS_DIR=binutils-2.19
GCC_DIR=gcc-3.3.6
GLIBC_DIR=glibc-2.3.2
LINUX_DIR=linux-2.6.10-8(根据实际情况填写)
GDB_DIR=gdb-6.5

将Crosstool的脚本文件和配置文件准备好之后,开始执行arm.sh脚本来编译交叉编译工具。具体执行命令如下:

#cdcrosstool-0.43
#./arm.sh

经过数小时的漫长编译之后,会在/opt/crosstool目录下生成新的交叉编译工具,其中包括以下内容:

arm-linux-addr2linearm-linux-g++arm-linux-ldarm-linux-size
arm-linux-ararm-linux-gccarm-linux-nmarm-linux-strings
arm-linux-asarm-linux-gcc-3.3.6arm-linux-objarm-linux-strip
arm-linux-c++arm-linux-gccbugarm-linux-objmpfix-embedded-paths
arm-linux-c++filtarm-linux-gcovarm-linux-ranlib
arm-linux-cpparm-linux-gprofarm-linux-readelf

然后将生成的编译工具链路径添加到环境变量PATH上去,添加的方法是在系统/etc/ bashrc文件的最后添加下面一行,在bashrc文件中添加环境变量

export PATH=/home/jiabing/gcc-3.3.6-glibc-2.3.2/arm-linux-bin/bin:$PATH

至此,arm-linux下的交叉编译工具链已经完成,现在就可以使用arm-linux-gcc来生成试验箱上的程序了!












H. 编译器可是没有思路.或许是我连编译器的本质还没搞懂吧.分为七个部分,词法分析,语法分析等..对吗

一般都是把源码转为elf,a.out,coff,omf之类格式的文件.再用连接器(或者链接器,反正就是linker).连接成程序(就是exe或dll之类的).
也有些是生成汇编代码,再调用汇编器汇编成elf,a.out,coff,omf之类.再连接.
也有些是直接生成exe,dll的.
vc也是先编译成win32格式(也说是COFF格式)的,再连接成exe,dll.

如果你想做编译器,可以去看<<编译原理>>之类的书.
也可以去下载一些开源的编译器代码来学习.
我也一直在学习编译器的.已经有段时间了.但是还是不太清楚.
编译原理看了大半也晕乎乎的,不知道说什么.

阅读全文

与连接器编译器困难相关的资料

热点内容
泰国永恒无删减版 浏览:42
我的世界服务器如何更改地皮地形 浏览:505
山西联通app是什么软件 浏览:355
更新电视剧最快的网站 浏览:134
兄弟训诫文严厉 浏览:607
李楠程序员 浏览:288
山推管家app怎么改密码 浏览:680
贷款结束什么时候解压 浏览:142
18命令方块代码 浏览:936
安卓手机视频怎么传到mac电脑上 浏览:932
马缨花app是什么 浏览:6
python金融分析招聘 浏览:60
可以直接写电影就有免费 浏览:108
北京一卡通app换了手机怎么弄 浏览:155
有程序员小说 浏览:688
点开就能看的网址 浏览:450
单片机控制和plc控制系统设计 浏览:29
她通常去电影院英文翻译 浏览:274
阿里个人云服务器叫什么名字 浏览:298
萱萱日记 浏览:707