不同编译器dll
❶ 每个编译器都不一样么 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设置不同。
❷ c#不同版本编译器生成的dll类库引用的时候一样吗
亲,高版本使用低版本的是一样的,但是低版本使用高版本就有问题了,因为有些东西低版本里没有。你的在vs2008下的dll,在vs2008和2010引用是一样的,但是在vs2010下的dll在vs2008下引用就可能有问题了
❸ 如果用c语言编写dll文件,一般用哪些编译器,或者说工具软件来实现
dll是windows独有的,所以非vc++6.0莫属。
新建一个project:win32 dynamic link library
❹ 如何在编译器里设置调用别人写好的lib和dll步骤
如何在编译器(vs2008)里设置调用别人写好的lib和dll如何在编译器(vs2008)里设置调用别人写好的lib和dll步骤:1.Tools->options->projectsandsolutions->VC++directories分别在包含文件,库文件填加了路径(这些路径只告诉编译器怎么找文件,没有说把那里面的文件加入工程.)(若不设置,编译报错:无法打开***文件)2.Project->properties->c/c++->general->additionalincludedirectories添加包含文件Project->properties->linker->general->additionallibrarydirectories添加库文件Project->properties->linker->input->添加用到的lib(这一步也可以在代码中显示调用#pragmacomment(lib,"***.lib"))(若不添加,连接报错:无法解析的外部符号)3.将dll文件拷贝到工程debug文件下(如果不拷贝,编译链接不报错,运行报错:无法找到***.dll)切记第三条,让老子排查了一上午,当然最好把所有输出目录定位到一个文件下面。附:DLL与LIB文件的区别共有两种库:一种是LIB包含了函数所在的DLL文件和文件中函数位置的信息(入口),代码由运行时加载在进程空间中的DLL提供,称为动态链接库dynamiclinklibrary。一种是LIB包含函数代码本身,在编译时直接将代码加入程序当中,称为静态链接库staticlinklibrary。共有两种链接方式:动态链接使用动态链接库,允许可执行模块(.dll文件或.exe文件)仅包含在运行时定位DLL函数的可执行代码所需的信息。静态链接使用静态链接库,链接器从静态链接库LIB获取所有被引用函数,并将库同代码一起放到可执行文件中。关于lib和dll的区别如下:(1)lib是编译时用到的,dll是运行时用到的。如果要完成源代码的编译,只需要lib;如果要使动态链接的程序运行起来,只需要dll。(2)如果有dll文件,那么lib一般是一些索引信息,记录了dll中函数的入口和位置,dll中是函数的具体内容;如果只有lib文件,那么这个lib文件是静态编译出来的,索引和实现都在其中。使用静态编译的lib文件,在运行程序时不需要再挂动态库,缺点是导致应用程序比较大,而且失去了动态库的灵活性,发布新版本时要发布新的应用程序才行。(3)动态链接的情况下,有两个文件:一个是LIB文件,一个是DLL文件。LIB包含被DLL导出的函数名称和位置,DLL包含实际的函数和数据,应用程序使用LIB文件链接到DLL文件。在应用程序的可执行文件中,存放的不是被调用的函数代码,而是DLL中相应函数代码的地址,从而节省了内存资源。DLL和LIB文件必须随应用程序一起发行,否则应用程序会产生错误。如果不想用lib文件或者没有lib文件,可以用WIN32API函数LoadLibrary、GetProcAddress装载。使用lib需注意两个文件:(1).h头文件,包含lib中说明输出的类或符号原型或数据结构。应用程序调用lib时,需要将该文件包含入应用程序的源文件中。(2).LIB文件,略。使用dll需注意三个文件:(1).h头文件,包含dll中说明输出的类或符号原型或数据结构的.h文件。应用程序调用dll时,需要将该文件包含入应用程序的源文件中。(2).LIB文件,是dll在编译、链接成功之后生成的文件,作用是当其他应用程序调用dll时,需要将该文件引入应用程序,否则产生错误。如果不想用lib文件或者没有lib文件,可以用WIN32API函数LoadLibrary、GetProcAddress装载。(3).dll文件,真正的可执行文件,开发成功后的应用程序在发布时,只需要有.exe文件和.dll文件,并不需要.lib文件和.h头文件
❺ 如何查看一个dll是用什么编译器编译的
dll文件是系统的动态链接库文件,可以用一些十六位春文本编辑器打开,如UltraEdit
修改DLL文件的方法
1、下载DLL文件修改工具EXESCOPE6.0-6.3或6.4工具
2、获取Browselc.dll、Shdoclc.dll、Shell32.dll和Cryptui.dll这几个链接文件。在找这几个文件时,最好将其他机器的硬盘,挂接在本机中,然后用本机的操作系统启动并复制这几个文件。
3、在修改DLL文件的时候,打开该键值,在右面的对话框中将所要修改的键值禁用即可,不要删除,以备日后恢复
❻ dll文件大都使用C语言或者C++编写的吗 我从网上搜相关的例子都是这两种语言编写的
dll 是动态连接库,里面包含的的是库函数的实现,有动态就有静态,静态链接库是程序用到这段代码,就会把库的这段代码复制到程序里,而动态链接库就是说当我调用这函数时,这函数的实现不在程序里,而在库里头,系统从c:\widnows\system32里找到对应库调用对应的函数。不管什么语言都,他们都可以写dll,因为在编写动态链接库时,你要声明里有什么函数还要实现它,不管什么语言,本质就是调用相同的系统API函数创建出来的dll文件。因此只要windows支持的语言都能用于创建dll,VB,delphi,C++,C#等都是可以的,鉴于为什么多数是C++,是因为做库和底层的东西多数用C/C++来做,比较高效,其实用delphi也可以的,只是delphi过时了,现在人不怎么用,所以代码不好找,本质:基本所有语言都能调用系统API函数创建动态链接库(dll).有不懂的请提问。
❼ VC定义的三种类型DLL有什么区别
.lib是在你的程序编译连接的时候就连接的文件,因此你必须告知编译器连接的lib文件在那里。一般来说,与动态连接文件相对比,lib文件也被称为是静态连接库。当你把代码编译成这几种格式的文件时,在以后他们就不可能再被更改。如果你想使用lib文件,就必须:1包含一个对应的头文件告知编译器lib文件里面的具体内容2设置lib文件允许编译器去查找已经编译好的二进制代码如果你想从你的代码分离一个dll文件出来代替静态连接库,仍然需要一个lib文件。这个lib文件将被连接到程序告诉操作系统在运行的时候你想用到什么dll文件,一般情况下,lib文件里有相应的dll文件的名字和一个指明dll输出函数入口的顺序表。如果不想用lib文件或者是没有lib文件,可以用WIN32API函数LoadLibrary、GetProcAddress。事实上,我们可以在VisualC++IDE中以二进制形式打开lib文件,大多情况下会看到ASCII码格式的C++函数或一些重载操作的函数名字。
❽ c++ 什么方法可以不通过编译器编译,生成DLL文件,或则是自动编译生成!
重新建一个项目,把对应的文件放进去,该引用的类引用,保证没错,就可以编译了。。。
❾ fortran如何生成dll文件
建工程(Project)的时候,选择动态链接库(Win32 Dynamic-Link Library)即可。
如果你用的是Compaq Fortran,新建的方法是
File-》New-》Projects-》Win32 Dynamic-Link Library,建完之后你再通过Source Files-》Add Files to Folder添加你现有的filename.f ,编译,在Debug或Release文件夹下就可以找到你编译的DLL文件了
❿ vs2005,vs2008,vs2010编译同一个c语言项目生成的dll文件为什么不一样大分别是252,380,246KB
优化方式和程度不有
不同的编译器用的是可能是不同的优化方案(同一个编译器不同的设置也会产生不同的结果,比如DeBug和Release)
优化方案取决于编译器开发者的水平.发行编译器时的主流CPU和编译器将要运行的系统平台等因素,
比如DOS时代int_max=0xffff,win32时代int_max=0xffffffff,同样是int变量,所占用的内存空间就不同
再如同样一条C语句:x=x+1;
早期的编译器可能编译成类似这样的结果(这里用结果一词而不用汇编语言,汇编指令,汇编代码之类的词是因为汇编=!机器指令)
mov eax,x
add eax,0x00000001
mov x,eax
而优化的编译器可能会把这条语句编译成和
x+=1;
同样的编译结果:
mov eax,x
inc eax //这条指令的执行速度和占用内存的空间都要小
mov x,eax
///////////////////////////////////////////////////////////////
类似的情况还有很多,因为这个回答是我一个字一个字打出来的,不是在哪个地方Copy的,指所以就不一一列举了,总之:
这些小的差别积少成多,就影响了文件的大小!