2018-5-12 windows 动态链接文件 .dll

时间:2022-06-06 13:52:30

三个文件,4个命令,具体如何 我也不造,今天算是对一个c语言文件整个编译过程的最后一步链接有了一点认识,等下看看,想写编译器玩,总觉得不写个编译器对不起自己学了这么多东西-_-.

//hello.c
#include<stdio.h>
#include"dll.h"
int main()
{
        hello();
        //printf("helloworld\n");
        return 0;
}
#include "dll.h"
#include<stdio.h>
EXPORT void hello(void)

{

printf ("Hello\n");

}
#ifdef BUILD_DLL

/* DLL export */

#define EXPORT __declspec(dllexport)

#else

/* EXE import */

#define EXPORT __declspec(dllimport)

#endif



EXPORT void hello(void);



gcc -c hello.c

gcc -c -DBUILD_DLL dll.c

gcc -shared -o message.dll dll.o -Wl,--out-implib,libmessage.a

gcc -o hello.exe hello.o -L./ -lmessage

今天发现静态链接还有动态链接  静态链接就是.lib【windows平台下】的文件啦,静态链接是由链接器在链接时将库的内容加入到可执行程序中的做法。链接器是一个独立程序,将一个或多个库或目标文件(先前由编译器汇编器生成)链接到一块生成可执行程序。

缺点:

静态链接的最大缺点是生成的 可执行文件太大,需要更多的系统资源,在装入内存时也会消耗更多的时间。
动态链接: 动态链接所调用的库函数代码并没有拷贝到程序的可执行文件中。它仅仅在exe文件中加入了调用的函数所在文件模块(DLL)和调用函数在文件中的位置等信息链接进目标程序,仅当应用程序被装入内存开始运行时,才从DLL中寻找相应函数代码,因此需要相应DLL文件的支持   【以上载自百度百科以及各种博客  侵权删    !!!!!!!!!!!!!!!!!!!!!!!】


还有mingw 我们使用的c编译器真的也是靠这个gCC  它是mini gnu for windows缩写啦,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,还有我需要去看书了。我妹子说她记忆力不好,老是忘,我也一样,这些东西要看过写过错过,才有60%记忆。溜啦溜啦 哎呀呀  电视剧太好看了,溜-_-

还有 一个报错 :D:\Program Files\Dev-Cpp\MinGW64\x86_64-w64-mingw32\lib32\libmingw32.a(lib32_libmingw32_a-crt0_c.o)                                                                                                                                                      In function `main':
C:\crossdev\src\mingw-w64-v3-git\mingw-w64-crt\crt\crt0_c.c             undefined reference to `WinMain@16'
D:\Program Files\Dev-Cpp\项目\collect2.exe                                             [Error] ld returned 1 exit status  类似这个玩意啦,我觉得是因为没有main函数,百度也是如此,然后 今天还造了没有操作数的指令:nop  好可爱喔,想到了nap

 运行该指令时单片机什么都不做,但是会占用一个指令的时间。
3. 当指令间需要有延时(给外部设备足够的响应时间;或是软件的延时等),可以插入“NOP”指令。

/* 久久真讨厌专门给我看-_- 哼 喏,好了我也忘记我刚刚说什么了就是这样*/ 刚刚久久给我看了cpu cpu就是处理指令集 ,从内存取指令然后执行,cpu里面有寄存器 ,寄存器里存放下一条指令地址 或者操作数   【真无聊,,,,想拆电脑】反正一切都是是数字形式【废话,你说人话计算机听得懂么】

分页  分段   物理地址 虚拟地址

/*上述我刚刚看的东西*/还有 巴拉巴拉一堆 ,有点明白 【我们程序看到的是虚拟地址经过MMU(Memoery management unit)转换成物理地址)】这个书把这个过程说的很清楚了,还有解释为什么要分页 分段,溜。