关于Bullet在不同平台下编译报错问题
背景
别问,问就是在写C++\OpenGL + Bullet 物理引擎
表现
报错如下
1 | error LNK2019: 无法解析的外部符号 "void * __cdecl btAlignedAllocInternal ... |
将平台从(x64)改为(Win32/x86)后,Bullet不报错了,但是OpenGL又出问题了,如下
1 | error LNK2019: 无法解析的外部符号 _glfwInit,函数 "struct GLFWwindow * __cdecl initWindow(int,int,char const *,int,int)" (?initWindow@@YAPAUGLFWwindow@@HHPBDHH@Z) 中引用了该符号 |
原因
Bullet官方默认提供32位的库,如果需要其它平台的库需要自行编译
在stackoverflow找到了类似的情况——传送门直达
给出的回答是:
说明是平台原因,试了一下, 当我把官方示例demoapplication项目从32位改为64位编译就会报出无法找到符号异常
解决
使用官方提供的生成工具先生成一次sln项目,版本建议选vs2010(毕竟这年头谁还用vs2005)
进入后将调试从x86改为x64,然后再调试一次。调试完毕后,在bullet文件夹目录下找到lib文件夹,里面会多出有x64字样的链接库文件,而不带x64字样的就是x86平台的链接库文件,所以我们只需要在自己的vs项目中的附加依赖项稍加修改即可。
如图,红色方框即是64位链接库,蓝色方框即是32位链接库。
现在再一次对附加依赖项进行修改。添加以下数据进去:
1 | X:\xxx\xxx\Bullet\lib\BulletDynamics_vs2010_x64_debug.lib |
注意,X:\xxx\xxx要替换为你bullet实际的文件地址
再次编译运行,成功解决
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 🏳️⚧️茶茶の博客🏳️⚧️!