关于Hazel游戏引擎sandbox项目使用imgui函数的链接错误

文章讨论了Hazel作为动态库与包含imgui静态库的编译问题,导致不同项目间的访问冲突。提供了两种解决方案:在imgui.h中添加IMGUI_API__declspec(dllexport)宏定义,以及通过设置def模板文件指定所需函数。
摘要由CSDN通过智能技术生成

错误原因

1.静态构造imgui时,所有的代码会在编译时期被放入一个静态库中,Hazel作为一个动态库为其提供链接,换句话说,在编译Hazel的过程中,imgui的静态库会被混合到Hazel的二进制文件中。这个时候如果我们打算在Sandbox项目使用imgui的函数的时候,如果我们让Sandbox也链接到imgui的时候,每个项目都会有一个imgui的实例,它们是不共享的。因此,如果你试图在sandbox中访问由Hazel占用的imgui实例,就可能会引发访问冲突和运行时错误。

2,如果sandbox不直接链接到imgui,而是通过链接Hazel(已链接imgui)来 indirectly 访问imgui,现象是,你只能访问到Hazel有过使用的imgui函数。这是因为,链接器在生成Hazel动态库时,为了减小二进制大小和加载时间,它除非有必要(即Hazel有使用到),否则不会链接imgui中未使用的函数。这也是为什么,动态库会比静态库小的一个重要原因。

3.因为Hazel是不会链接到哪些它未曾使用的函数符号定义,所以sandbox自然也无法从Hazel中得到它想要的函数定义。

解决方案

1.其中一个解决方案是在imgui.h的文件中加入宏定义#define IMGUI_API __declspec(dllexport)

2.还有一种方法,设置def模板文件,把需要的函数定义加入即可。

  • 10
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值