LINUX.ORG.RU

Использование Box2d в linux

 , ,


0

1

Что-то я сегодня подтормаживаю. Скинул себе исходники Box2d. Скомпилировал, просмотрел демку. Скинул хедеры в /usr/include/Box2D. Закинул libBox2D.a в папку с файлом HelloWorld.cpp, который стырил из Box2D и компилирую

g++ HelloWorld.cpp -L /home/username/laboratory/Box2D/libBox2D.a 
А g++ в ответ ругается

/tmp/ccM3DeH3.o: In function `main':

HelloWorld.cpp:(.text+0x42): undefined reference to `b2World::b2World(b2Vec2 const&)'

HelloWorld.cpp:(.text+0x88): undefined reference to `b2World::CreateBody(b2BodyDef const*)'

HelloWorld.cpp:(.text+0xba): undefined reference to `b2PolygonShape::SetAsBox(float, float)'

HelloWorld.cpp:(.text+0xd3): undefined reference to `b2Body::CreateFixture(b2Shape const*, float)'

HelloWorld.cpp:(.text+0x123): undefined reference to `b2World::CreateBody(b2BodyDef const*)'

HelloWorld.cpp:(.text+0x155): undefined reference to `b2PolygonShape::SetAsBox(float, float)'

HelloWorld.cpp:(.text+0x1a0): undefined reference to `b2Body::CreateFixture(b2FixtureDef const*)'

HelloWorld.cpp:(.text+0x1e9): undefined reference to `b2World::Step(float, int, int)'

HelloWorld.cpp:(.text+0x286): undefined reference to `b2World::~b2World()'

HelloWorld.cpp:(.text+0x2c9): undefined reference to `b2World::~b2World()'

/tmp/ccM3DeH3.o: In function `b2PolygonShape::b2PolygonShape()':

HelloWorld.cpp:(.text._ZN14b2PolygonShapeC2Ev[_ZN14b2PolygonShapeC5Ev]+0x22): undefined reference to `vtable for b2PolygonShape'

/tmp/ccM3DeH3.o: In function `b2PolygonShape::~b2PolygonShape()':

HelloWorld.cpp:(.text._ZN14b2PolygonShapeD2Ev[_ZN14b2PolygonShapeD5Ev]+0x13): undefined reference to `vtable for b2PolygonShape'

collect2: error: ld returned 1 exit status

Очевидно, что код прошел, а ошибка появилась при линковании. Т.е. библиотеку он не видит. Значит, что-то не так объясняю компилятору. Не могу понять что именно.



Последнее исправление: promistrio (всего исправлений: 1)

Ответ на: комментарий от waker

Еще раз спасибо. Читал какой-то манул и там сказали, что -L - это добавить библиотеку нележащую в стандартных каталогах. Отложив себе это в голову, я так и не полез в man.

promistrio
() автор топика
Ответ на: комментарий от phpwwwuser

А он же похоже с статической библиотекой линкует.

Выхлоп компилятора как бы намекает, что ТС не указал с чем нужно линковать:

HelloWorld.cpp:(.text+0x42): undefined reference to `b2World::b2World(b2Vec2 const&)'

andreyu ★★★★★
()
Ответ на: комментарий от promistrio
g++ HelloWorld.cpp -L/home/username/laboratory/Box2D -lBox2D

g++ HelloWorld.cpp -L. -lBox2D
arturpub ★★
()
Ответ на: комментарий от promistrio

Еще можно напрямую указать файл для линкера, что ты и сделал чуть выше без -L. Первый твой вариант указывал линкеру на несуществующий *путь к каталогу*, который он просто пропускал, а сама библиотека нигде не передавалась, отсюда анрезолведы.

arturpub ★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.