尝试使用 Box2D 时未定义的引用 b2Body::SetUserData(void*)
Undefined reference when trying to use Box2D's b2Body::SetUserData(void*)
下面是重现问题的一些简单代码:
#include <box2d/box2d.h>
int main()
{
b2World world(b2Vec2_zero);
b2BodyDef bdef;
b2Body* body = world.CreateBody(&bdef);
body->SetUserData(body);
return 0;
}
这应该根据我读过的所有内容进行编译,并且(对于学究)我猜它在技术上确实 编译,但是当我尝试(使用 g++ test.cpp -lbox2d
) 我收到链接器错误:
/usr/bin/ld: /tmp/ccgHfvqv.o: in function `main':
test.cpp:(.text+0x75): undefined reference to `b2Body::SetUserData(void*)'
collect2: error: ld returned 1 exit status
我尝试 Google 搜索 "undefined reference to b2Body::SetUserData(void*)"
,但没有找到任何结果。
我也尝试通过 b2BodyDef
来设置它,但是该结构中的 userData
成员似乎工作方式不同,指向具有单个 [=18] 的 b2BodyUserData
结构=] 成员,它似乎不是为了保存用户数据指针而设计的,因为在那里设置地址会导致 Box2D 稍后写入该地址,从而破坏数据。 (我使用 GDB 观察点来检查这一点。)
原来 SetUserData
最近在 Box2D 2.4.1 中被删除了。我还注意到我的一些使用 b2BodyDef
方法的旧代码(我忘记了我过去使用过它)将不再编译;以前它只是一个直接的 void*
指针,没有我提到的问题。
而不是foo->SetUserData(bar)
,现在看来正确的方法是foo->GetUserData().pointer = bar
。 (Source)
下面是重现问题的一些简单代码:
#include <box2d/box2d.h>
int main()
{
b2World world(b2Vec2_zero);
b2BodyDef bdef;
b2Body* body = world.CreateBody(&bdef);
body->SetUserData(body);
return 0;
}
这应该根据我读过的所有内容进行编译,并且(对于学究)我猜它在技术上确实 编译,但是当我尝试(使用 g++ test.cpp -lbox2d
) 我收到链接器错误:
/usr/bin/ld: /tmp/ccgHfvqv.o: in function `main':
test.cpp:(.text+0x75): undefined reference to `b2Body::SetUserData(void*)'
collect2: error: ld returned 1 exit status
我尝试 Google 搜索 "undefined reference to b2Body::SetUserData(void*)"
,但没有找到任何结果。
我也尝试通过 b2BodyDef
来设置它,但是该结构中的 userData
成员似乎工作方式不同,指向具有单个 [=18] 的 b2BodyUserData
结构=] 成员,它似乎不是为了保存用户数据指针而设计的,因为在那里设置地址会导致 Box2D 稍后写入该地址,从而破坏数据。 (我使用 GDB 观察点来检查这一点。)
原来 SetUserData
最近在 Box2D 2.4.1 中被删除了。我还注意到我的一些使用 b2BodyDef
方法的旧代码(我忘记了我过去使用过它)将不再编译;以前它只是一个直接的 void*
指针,没有我提到的问题。
而不是foo->SetUserData(bar)
,现在看来正确的方法是foo->GetUserData().pointer = bar
。 (Source)