|
对于 CFREE5:
和 #pragma .....应该一致,如果没有这一坨 #pragma comment(),不添加任何.lib 即可,说明 dll 文件是已经被他人先搞定了 (比如 单纯的 helloworld.c , 不需要添加.lib,因为 c-runtim-library.lib ( crt.lib ) 已经在编译时自动添加上去了 )
对于linux,gcc -laabbc 就是 连接 aabbc.so 文件 (运行时 从 LD_LIBRARY_PATH;RPATH 中加载)
对于 windows,连接的是 aabbc.dll, 从 %systemroot%\system32; %cd% ; 以及各种 winsxs 中寻找。
.dll 里面包含函数的真实实现.
===============
加载的 .lib , 是用来自动 loaddll 的,里面不包含函数实现.
如果不加载.lib,可以在代码里手动 LoadLibrary。(不建议,某些dll 有初始化函数,.lib里自动调用, 你不知道初始化函数地址和声明,根本不方便调用),所以封装成.lib 方便一点.
===============
-l库名字 是 compile driver (你可以理解成 x86_64-gnu-gcc , clang , mingw-win32-x86_64-gcc 这些程序 )的参数,意思是程序运行时自动加载 xxx.dll,但是仅仅是复制到内存 (你可以理解成仅仅复制到内存,虽然实际上没这么简单),不会搞loadlibrary,xxxinit(),这种东西,但显然链接上去是loadlibrary的前提。 |
|