c++ - 如何在 Box2D 中创建一个世界而不留下未解决的外部
问题描述
我一直在研究 2D 物理引擎,然后 Box2D 出现了。我一直在阅读它并尝试进行设置,但遇到了问题。
- 使用 premake5 创建构建
- 打开一个新的 Visual Studio 2019 项目
- 将 Additional Include Directory 设置为 Box2D 标头文件夹
- 将附加库目录(在链接器下)设置为包含 lib 文件 (Box2D.lib) 的文件夹
- 将附加依赖项设置为 Box2D.lib
完成这一切后,我似乎能够毫无问题地调用和创建 Box2d 变量和函数。但是当我试图建立一个世界时,它开始导致错误。
错误
LNK1120 2 unresolved externals
LNK2019 unresolved external symbol "public: __thiscall b2World::b2World(struct b2Vec2 const &)" (??0b2World@@QAE@ABUb2Vec2@@@Z) referenced in function "public: void __thiscall Game::run(void)" (?run@Game@@QAEXXZ)
LNK2019 unresolved external symbol "public: __thiscall b2World::~b2World(void)" (??1b2World@@QAE@XZ) referenced in function "public: void __thiscall Game::run(void)" (?run@Game@@QAEXXZ)
我正在建立的项目是尝试将 SFML 与 Box2d 一起使用。在生成的文件夹中运行测试平台是可行的,但我试图弄清楚如何在需要时将引擎移植到其他项目中。该解决方案按预期工作。但是一旦创建了世界变量,它就会产生错误。
但是创建和设置 b2Vec2 和 b2BodyDef 变量不会引起任何问题。我不太确定可能是什么原因,我已经在线查看了各种指南,检查了路径是否正确并重新生成了库文件。
我怀疑问题在于 Box2D 被配置为在 x64 中构建,而我的项目正在 x86 中构建。我想知道是否有人知道在 x86 中运行 Box2D 或类似的方法。
编码
void Game::run()
{
sf::Clock clock;
sf::Time timeSinceLastUpdate = sf::Time::Zero;
sf::Time timePerFrame = sf::seconds(1.f / 60.f); // 60 fps
b2Vec2 gravity(0.0f, -10.0f);
b2World myWorld = b2World(gravity); //The errors are cause by this line.
// Define the ground body.
b2BodyDef groundBodyDef;
groundBodyDef.position.Set(0.0f, -10.0f);
while (m_window.isOpen())
{
processEvents(); // as many as possible
timeSinceLastUpdate += clock.restart();
while (timeSinceLastUpdate > timePerFrame)
{
timeSinceLastUpdate -= timePerFrame;
processEvents(); // at least 60 fps
update(timePerFrame); //60 fps
}
render(); // as many as possible
}
}
解决方案
找到了解决方案。
该问题是由针对 x64 系统的测试台生成的库文件引起的。在 Win(32) 模式下重新生成库文件生成了正确的库文件,该文件解决了
推荐阅读
- ms-access - Microsoft Access 查询条件:当我输入 ] 时,它不显示
- c - C 中实现定义的行为
- kubernetes - 我如何在这个 yaml 文件中动态设置 env 变量 MYSQL_ROOT_PASSWORD 的值,并且我想在创建 pod 时在运行时传递这个值
- python - 定义函数参数时返回语法错误
- python-3.x - 将 .log 记录转换为 json
- android - 错误:所有风味现在必须属于一个命名风味维度
- javascript - 使 interact.js 可调整大小的像素完美
- c# - Using 指令 - 通过引用查找所有正在使用的方法和属性
- spring-boot - @Query 返回对象页面而不是实体对象页面
- azure - Azure:无法安装正确推送到工件源存储库的 PowerShell 模块