无忧启动论坛

 找回密码
 注册
搜索
系统gho:最纯净好用系统下载站投放广告、加入VIP会员,请联系 微信:wuyouceo
查看: 890|回复: 2
打印 上一主题 下一主题

[讨论] 求助:C++库连接 设置

[复制链接]
跳转到指定楼层
1#
发表于 2024-7-12 15:14:23 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
问题A、CFree 5 项目属性设置,如图:

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


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

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

2#
发表于 2024-7-13 12:42:17 | 只看该作者
谢谢谢谢谢谢谢谢
回复

使用道具 举报

3#
发表于 2024-7-15 22:39:55 | 只看该作者
对于 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的前提。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

小黑屋|手机版|Archiver|捐助支持|无忧启动 ( 闽ICP备05002490号-1 )

闽公网安备 35020302032614号

GMT+8, 2024-11-16 05:49

Powered by Discuz! X3.3

© 2001-2017 Comsenz Inc.

快速回复 返回顶部 返回列表