나는 Google의 액체 재미있는 라이브러리를 만들려고 노력하고 있지만, mingw를 사용하는 Windows에서는 약간의 문제가 발생합니다. 이 방법에서는 컴파일이 실패합니다.mingw에서는 컴파일 분할이 잘못되었지만 Linux에서는 gcc가 아닙니다.
void b2ParticleSystem::CreateParticlesStrokeShapeForGroup(
const b2Shape *shape,
const b2ParticleGroupDef& groupDef, const b2Transform& xf)
{
float32 stride = groupDef.stride;
if (stride == 0)
{
stride = GetParticleStride();
}
float32 positionOnEdge = 0;
int32 childCount = shape->GetChildCount();
for (int32 childIndex = 0; childIndex < childCount; childIndex++)
{
b2EdgeShape edge;
if (shape->GetType() == b2Shape::e_edge)
{
edge = *(b2EdgeShape*) shape;
}
else
{
b2Assert(shape->GetType() == b2Shape::e_chain);
((b2ChainShape*) shape)->GetChildEdge(&edge, childIndex);
}
b2Vec2 d = edge.m_vertex2 - edge.m_vertex1;
float32 edgeLength = d.Length();
while (positionOnEdge < edgeLength)
{
b2Vec2 p = edge.m_vertex1 + positionOnEdge/edgeLength * d;
CreateParticleForGroup(groupDef, xf, p);
positionOnEdge += stride;
}
positionOnEdge -= edgeLength;
}
}
postionOnEdge + = stride; 라인은 성공적으로 컴파일 될 것이라고 말하면 문제가 발생하지만, 실행하면 무한 루프가 발생합니다. 나는 왜 그것이 단지 mingw에서 seg fault를 일으키는 지에 대한 아이디어를 잃어 버렸다. positionOnEdge + = 0.0f로 라인을 변경한다. 그것이 segfault하게 만든다.
컴파일 중의 크래쉬는 컴파일러의 버그입니다. 'positionParticleForGroup'에 대한 호출 위에'positionOnEdge + = stride' 행을 이동하면 어떻게됩니까? – 1201ProgramAlarm
불행히도 그것을 움직이는 아이디어를 주셔서 감사합니다 같은 문제가 발생합니다. 나는 그것이 리눅스에서 잘 작동하기 때문에 컴파일러 버그 일 가능성이 높다고 생각했다. 하지만 누군가가 어떤 일을 할 수 있기를 바랬습니다. 그런 기본적인 작업이기 때문에 그 라인 만이 문제를 일으킨다는 것은 나에게 정말로 이상하게 보인다. – Ben
호기심을 위해서만; 'b2Vec2 p = edge.m_vertex1 + (positionOnEdge * d)/edgeLength; '행을' – Loreto