魔法动态库

引用自《Game Engine Architecture》的原句:

"Note that Visual Studio employs various “magic spells” to specify libraries that should be linked into an executable. For example, a special #pragma instruction in your source code can be used to instruct the linker to automatically link with a particular library. For this reason, you may not see all of the libraries you’re actually linking to in the “Additional Dependencies” field. (In fact, that’s why they are called additional dependencies.) You may have noticed, for example, that Direct X applications do not list all of the DirectX libraries manually in their “Additional Dependencies” field. Now you know why."

Visual Studio 提供的一种自动链接库的特殊指令

#pragma comment(lib, "xxx.lib")

这就是书中说的 Visual Studio 的“magic spell(魔法咒语)”之一。


一句话解释:

在 Visual Studio 中,你可以在 C++ 源代码中写一行:

#pragma comment(lib, "库文件名.lib")

来告诉 链接器 自动链接某个 .lib 静态库,而不需要手动在“项目属性 → 链接器 → 输入 → 附加依赖项”里添加


作用和好处

传统方式 #pragma comment(lib)
手动在项目属性里添加依赖 直接在源码中声明
可能遗漏或写错 随代码一起携带更直观
依赖和源码分离 依赖和源码绑定

示例:

比如我们用到了 d3d11.lib(Direct3D 11):

#pragma comment(lib, "d3d11.lib")#include <d3d11.h>// 后续代码...

你在项目属性里不写依赖项,它仍然能正常编译、链接、运行!这就是它的神奇之处。


Visual Studio 常见内置库依赖(自动添加的):

用法说明
user32.lib 窗口、消息循环
gdi32.lib GDI 图形接口
kernel32.lib 系统调用、线程
d3d11.lib Direct3D 11
dsound.lib DirectSound
ws2_32.lib 网络 socket 编程(winsock)

许多 SDK(比如 DirectX、FMOD、OpenAL 等)都推荐在头文件中加上 #pragma comment(lib, "xxx"),这样开发者使用时就不用记住要手动加库。


注意事项

说明
支持静态链接库 .lib 不能用于 .dll(动态链接库)本身
仅在 MSVC 编译器中有效 GCC/Clang 不支持这个 pragma 指令
写在头文件中可能重复多次 编译器会处理好,不用太担心冲突
多个文件中重复写同一个库不会报错 链接器自动去重

总结一句话:

#pragma comment(lib, "xxx.lib") 是一种方便的方式,将库依赖直接写在代码里,让 编译+链接过程自动完成,尤其适合 Visual Studio 用户和大型项目模块化开发。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/902914.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

BUAA_OO_Unit1总结

Unit1 总结 1. 程序结构分析 1.1 代码结构(类图)1.2 类的度量统计类名 属性个数 方法个数 方法名 方法规模(代码行) 控制分支数目 类总代码规模(行)Function 4 6 Function 5 0 85sort 10 1 (双重循环)getCan 20 3 (条件+循环嵌套)huanCan 15 2 (条件替换逻辑)prework 15 …

永久免费!支持视频号下载,2025最新版本

在昨天的推文中给大家分享了一款非常不错的 Ai 工具,含有 Ai 一键抠图、Ai 无损放大等功能,对于设计和作图的小伙伴来说,非常的有帮助这款Ai 合集工具,内容丰富,且使用简单,纯在线使用,不消耗本地电脑硬件内存,有需要的小伙伴可以点击下方链接体验 一键Ai抠图、无损放大…

AbstractAutoProxyCreator#postProcessBeforeInstantiation

一、定义 postProcessBeforeInstantiation 是 Spring AOP 动态代理的核心扩展点,通过提前创建代理对象优化性能,并支持丰富的自定义逻辑(如事务、安全) 二、代码分析 public Object postProcessBeforeInstantiation(Class<?> beanClass, String beanName) throws Be…

Day20_javascanner_struct

Java JavaDoc javadoc命令是用来生成自己API文档的 参数信息: @author 作者名 @version 版本号 @since 指明需要最早使用的jdk版本 @param 参数名 @return 返回值情况 @throws 异常抛出情况 /*** @author XXX* @version 1.0* @since 1.8*/public class Doc {String name;/*** …

k8s基本字段

k8s基本字段 limits字段 此字段限制的是硬件的资源,如果容器尝试申请超过限制的内存将会终止容器 requests字段 此字段限制的是容器可以请求的资源,可以超出request申请额外的资源,但是不能超过limits, 500m等于0.5个CPU本地临时性文件,采用这种配置时,你会把所有类型的临…

【杭电多校比赛记录】2025“钉耙编程”中国大学生算法设计春季联赛(3)

比赛链接 本文发布于博客园,会跟随补题进度实时更新,若您在其他平台阅读到此文,请前往博客园获取更好的阅读体验。 跳转链接:https://www.cnblogs.com/TianTianChaoFangDe/p/18786128 开题 + 补题情况 很菜的一把,就开了三个签到题,1001 Lucas 定理花了好久才看出来,明明…

51单片机学习笔记-3

串口通信UART(universal asynchronous receiver transmitter,通用异步收发器):可用来实现串口通信。串口硬件:基础串口包含TXD/RXD两个通信线,他们交叉连接。(如DB9通常使用2(RXD),3(TXD),5(GND)。) 当串口两头电平标准不一样时,需要叫电平转换芯片。TTL电平:5V表示1,…

微信小程序 -2025/3/22

HttpClient 介绍:核心api发送请求步骤小程序目录结构小程序页面组成微信登录 发送请求

应用打包测试

用HBuilder打包了一个之前写着玩的html页面

小白与Android Studio的初遇

新手小白在Android Studio上运行程序的时候遇到俩问题,通过在网上各种找解决方法,最终解决了(然后就想起来继续写博客这件事儿了)。 【第一个问题】关于“Error runningapp:No target device found”。就是它找不到设备(虚拟机或者真机),所以配置虚拟机就行了。 (当我以…

20234220 实验一《Python程序设计》实验报告

20234220 2024-2025-2 《Python程序设计》实验一报告 课程:《Python程序设计》 班级: 2342 姓名: 马燕秋 学号:20234220 实验教师:王志强 实验日期:2025年3月18日 必修/选修: 公选课 1.实验内容 1.熟悉Python开发环境; 2.练习Python运行、调试技能; 3.编写程序,练…

Echarts-普通地图和3D地图实现

效果图实现代码 <template><div class="app"><h1>普通地图----------------</h1><div class="map-container" ref="map_ref"></div><h1>3D地图----------------</h1><div class="map-c…