网站建设招标方案,深圳模板网站建设案例,德州企业网站优化公司,安阳seo关键词优化本人菜鸟#xff0c;文中若有代码、术语等错误#xff0c;欢迎指正 我写的项目地址#xff1a;https://github.com/liujianjie/GameEngineLightWeight#xff08;中文的注释适合中国人的你#xff09; 文章目录前言操作步骤讲解GitHubHazel项目此项目定位项目属性修改Sand… 本人菜鸟文中若有代码、术语等错误欢迎指正 我写的项目地址https://github.com/liujianjie/GameEngineLightWeight中文的注释适合中国人的你 文章目录前言操作步骤讲解GitHubHazel项目此项目定位项目属性修改Sandbox项目此项目定位项目属性修改写代码Hazel项目Sandbox项目C静态链接与动态链接前言 此节目的 新建好Hazel和Sandbox项目Hazel项目生成为dllSandbox项目生成为exe运行此exe通过动态链接Hazel的dll可以调用dll定义的函数并输出信息。 Cherno的Hazel项目地址 https://github.com/TheCherno/Hazel
操作步骤讲解
GitHub 新建空仓库 本地创建Hazel项目 注意将解决方案和项目不放在同一目录 Github仓库与本地项目关联 cmd输入命令克隆项目 git clone https://github.com/username/Hazel2将Hazel2文件夹里的文件都剪切到sln文件下的目录然后删除Hazel2文件夹
Hazel项目
此项目定位
Hazel是我们的引擎核心库需生成为dll文件
然后创建外部应用程序项目生成为exe文件将Hazel导出的dll链接到exe文件中。
项目属性修改 删除32位的发布平台 设置项目配置类型为dll 调整输出目录和中间目录 $(SolutionDir)\bin\$(Configuration)-$(Platform)\$(ProjectName)\
$(SolutionDir)\bin-int\$(Configuration)-$(Platform)\$(ProjectName)\中间目录:存储一些obj、二进制文件生成好dll、exe后可以删除此文件夹
Sandbox项目
此项目定位
是exe应用程序
项目属性修改
删除32位发布平台调整输出目录和中间目录设置项目配置类型为exe应用程序设置为启动目录 Sandbox项目引用Hazel项目 说明 此引用将会链接Hazel.lib文件。 难点可Hazel明明设置为dll为什么还是能生成lib文件因为lib文件中包含从dll文件中导出的所有函数这样就不用手动从dll文件加载函数或符号。(不懂这含义) 打开项目属性-链接器可以看到链接命令 这是视频里的我本地却没有这行命令。。。
写代码
Hazel项目 代码 Test.h #pragma once
namespace Hazel {_declspec(dllexport) void Print();
}Test.cpp #include Test.h
#include stdio.hnamespace Hazel {void Print() {printf(Welcome to Hazel Game Engine!\n);}
}项目生成
Sandbox项目 代码 application.cpp namespace Hazel {_declspec(dllimport) void Print();
}
void main() {Hazel::Print();
}项目生成 运行报错 解决bug 由于Sandbox项目引用了Hazel项目而Hazel又是dll文件所以会报找不到Hazel.dll 需要将Hazel.dll文件放到Sandbox.exe文件同目录下才行 正确运行结果
C静态链接与动态链接
阅读的CSDN博客https://blog.csdn.net/kang___xi/article/details/80210717 静态链接 说明 使用静态库方式链接编译后链接时会将使用的库函数对应所包含库函数定义的.o目标文件都包含在exe文件中。 优点 执行速度快因为可执行文件程序内部包含了所有需要执行的东西 缺点 浪费空间因为多个可执行程序对同所需要的目标文件都有一份副本 更新慢如果有一个.o目标文件发生改变那么对应的使用这个.o目标文件的多个可执行程序需要重新来一遍链接过程即链接多个.o目标文件来实现生成可执行文件。 动态链接 说明 使用动态库方式链接编译后因为推迟链接不会将使用的库函数对应的dll文件都包含在exe文件中而是在exe运行的时候将dll加载到内存CPU中再链接。 优点 节省空间多个可执行程序对同所需要的库函数共享一份副本 更新快一个源文件发生改变只需更新编译成dll文件不用每个可执行程序需要重新来一遍链接过程因为多个可执行程序在运行时时链接且共享一份副本 缺点 启动速度慢因为每次执行程序都需要链接 我对此小知识的思考 动态链接dll是将整个dll都加载到内存中还是说当前可执行文件使用了哪些库函数将对应的函数定义加载到CPU中。 问了同学和交流群的人他们说是整个dll都加载到内存中。