三个文件,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平台下】的文件啦,静态链接是由链接器在链接时将库的内容加入到可执行程序中的做法。链接器是一个独立程序,将一个或多个库或目标文件(先前由编译器或汇编器生成)链接到一块生成可执行程序。
缺点:
还有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)转换成物理地址)】这个书把这个过程说的很清楚了,还有解释为什么要分页 分段,溜。