无忧启动论坛

标题: 求助:C++库连接 设置 [打印本页]

作者: proof    时间: 2024-7-12 15:14
标题: 求助:C++库连接 设置
问题A、CFree 5 项目属性设置,如图:

1、上下两块区域,有什么联系与区别?
2、参数行(下区),貌似是 -l + 库名(去掉.lib) 。比如 -l dxguid      -l d3d9,是什么意思? -l 是 MinGW 编译命令行参数?


问题B、Visual Studio 项目属性设置,如图:

1、附加依赖项。不同的项目,需添加不同的内容?如何知道该添哪些库文件?与源代码中   #pragma comment(lib,"*****.lib")   一致?  若自己编程 或 源码中没有#pragma comment(),如何确定库文件名单?


作者: 悠悠youyou    时间: 2024-7-13 12:42
谢谢谢谢谢谢谢谢
作者: winpefk    时间: 2024-7-15 22:39
对于 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的前提。




欢迎光临 无忧启动论坛 (http://bbs.wuyou.net./) Powered by Discuz! X3.3