Ошибка «неопределенная ссылка на *» при компиляции файла, использующего Open Dynamics Engine версии 0.13.1

#c #installation #ode-library

#c #установка #ode-библиотека

Вопрос:

Я новичок в организации проектов на C и уже неделю пытаюсь запустить проект Open Dynamics Engine, но продолжаю получать несколько ошибок. Во-первых, что я сделал:

Но когда я запускаю свой makefile, я получаю следующие ошибки:

gcc -Wall -g -DdDOUBLE -o test тест.o -L/home/имя пользователя/ode-0.13.1/ode/src/libode.la -L/home/имя пользователя/ode-0.13.1/drawstuff/src/libdrawstuff.la -L/usr/X11R6/lib -L/usr/lib -L/usr/ local/lib -I. -I/home/username/ode-0.13.1/include/ -I/usr/X11R6/include -I/usr/include -lm -lode -lGL -lGLU /usr/local/lib/libode.a(collision_trimesh_box.o): В функции dCalcVectorLength3':
/home/username/ode-0.13.1/ode/src/../../include/ode/odemath.h:148: undefined reference to
sqrt’ /home/username/ode-0.13.1/ode/src/../../include/ode/odemath.h:148: неопределенная ссылка на sqrt'
/home/username/ode-0.13.1/ode/src/../../include/ode/odemath.h:148: undefined reference to
sqrt’ /usr/local/lib/libode.a(util.o): в функции dxStepBody(dxBody*, double)':
/home/username/ode-0.13.1/ode/src/util.cpp:618: undefined reference to
sincos’ /home/username/ode-0.13.1/ode/src/util.cpp:630: неопределенная ссылка на sincos'
/home/username/ode-0.13.1/ode/src/util.cpp:628: undefined reference to
sqrt’ /home/username/ode-0.13.1/ode/src/util.cpp: 590: неопределенная ссылка на `sqrt’

… (и это продолжается для страниц)

/usr/local/lib/libode.a(OPC_AABBTree.o): в функции Opcode::AABBTree::Build(Opcode::AABBTreeBuilder*)':
/home/username/ode-0.13.1/OPCODE/OPC_AABBTree.cpp:413: undefined reference to
operator new[](unsigned long)’ /home/username/ode-0.13.1/КОД операции/OPC_AABBTree.cpp:427: неопределенная ссылка на operator new[](unsigned long)'
/usr/local/lib/libode.a(OPC_AABBTree.o): In function
код операции::AABBTreeNode::~AABBTreeNode() ‘: /home/имя пользователя/ode-0.13.1/КОД операции/OPC_AABBTree.cpp: 83: неопределенная ссылка на operator delete[](void*, unsigned long)'
/usr/local/lib/libode.a(OPC_Collider.o): In function
код операции::Collider::~Collider()’: /home/имя пользователя/ode-0.13.1/КОД операции /OPC_Collider.cpp:54: неопределенная ссылка на operator delete(void*, unsigned long)'
/usr/local/lib/libode.a(OPC_Collider.o):(.data.rel.ro._ZTIN6Opcode8ColliderE[_ZTIN6Opcode8ColliderE] 0x0): undefined reference to
vtable для __cxxabiv1::__class_type_info’ /usr/local/lib/libode.a(OPC_Collider.o):(.data.rel.ro._ZTVN6Opcode8ColliderE[_ZTVN6Opcode8ColliderE] 0x20) : неопределенная ссылка на `__cxa_pure_virtual’ collect2: ошибка: ld вернул 1 статус выхода makefile:14: не удалось выполнить рецепт для целевого ‘test’ make: *** Ошибка [test] 1

Эти ошибки выглядят так, будто библиотека настроена неправильно, но я почти уверен, что я правильно установил и для my -L установлены правильные пути.

Примечание 1: демонстрационные версии, включенные в библиотеку ode, работают.

Примечание 2: Ранее я пытался (и потерпел неудачу) установить другие версии ode. Я сделал все возможное с make uninstall и make clean для очистки этих неудачных установок, но я думаю, что они могут влиять на новые установки, потому что при первом запуске появляется очень много sudo make install сообщений. Nothing to do here...

Комментарии:

1. Попробуйте поставить -lm последним. -lode -lGL -lGLU -lm . Порядок имеет значение.

2. Также используйте g , а не gcc, для кода C .

3. К вашему сведению, довольно типично устанавливать ваши пользовательские библиотеки в /usr/local префикс (запускать configure с --prefix=/usr/local помощью), чтобы ваши установки были аккуратно наложены поверх всего, что установлено вашей ОС (и могут быть аккуратно уничтожены, если вы захотите удалить все, что вы установили вручную, без ущерба для вашей ОС)