#c #installation #ode-library
#c #установка #ode-библиотека
Вопрос:
Я новичок в организации проектов на C и уже неделю пытаюсь запустить проект Open Dynamics Engine, но продолжаю получать несколько ошибок. Во-первых, что я сделал:
- Установлен ode-0.13.1 с помощью automake, как указано в руководстве.
- Создан файл
test.cpp
с кодом из инструкции по отскакиванию мяча. - Написал makefile для компиляции.
Но когда я запускаю свой 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':
sqrt’ /home/username/ode-0.13.1/ode/src/../../include/ode/odemath.h:148: неопределенная ссылка на
/home/username/ode-0.13.1/ode/src/../../include/ode/odemath.h:148: undefined reference tosqrt'
sqrt’ /usr/local/lib/libode.a(util.o): в функции
/home/username/ode-0.13.1/ode/src/../../include/ode/odemath.h:148: undefined reference todxStepBody(dxBody*, double)':
sincos’ /home/username/ode-0.13.1/ode/src/util.cpp:630: неопределенная ссылка на
/home/username/ode-0.13.1/ode/src/util.cpp:618: undefined reference tosincos'
sqrt’ /home/username/ode-0.13.1/ode/src/util.cpp: 590: неопределенная ссылка на `sqrt’
/home/username/ode-0.13.1/ode/src/util.cpp:628: undefined reference to
… (и это продолжается для страниц)
/usr/local/lib/libode.a(OPC_AABBTree.o): в функции
Opcode::AABBTree::Build(Opcode::AABBTreeBuilder*)':
operator new[](unsigned long)’ /home/username/ode-0.13.1/КОД операции/OPC_AABBTree.cpp:427: неопределенная ссылка на
/home/username/ode-0.13.1/OPCODE/OPC_AABBTree.cpp:413: undefined reference tooperator new[](unsigned long)'
код операции::AABBTreeNode::~AABBTreeNode() ‘: /home/имя пользователя/ode-0.13.1/КОД операции/OPC_AABBTree.cpp: 83: неопределенная ссылка на
/usr/local/lib/libode.a(OPC_AABBTree.o): In functionoperator delete[](void*, unsigned long)'
код операции::Collider::~Collider()’: /home/имя пользователя/ode-0.13.1/КОД операции /OPC_Collider.cpp:54: неопределенная ссылка на
/usr/local/lib/libode.a(OPC_Collider.o): In functionoperator delete(void*, unsigned long)'
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
/usr/local/lib/libode.a(OPC_Collider.o):(.data.rel.ro._ZTIN6Opcode8ColliderE[_ZTIN6Opcode8ColliderE] 0x0): undefined reference to
Эти ошибки выглядят так, будто библиотека настроена неправильно, но я почти уверен, что я правильно установил и для 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
помощью), чтобы ваши установки были аккуратно наложены поверх всего, что установлено вашей ОС (и могут быть аккуратно уничтожены, если вы захотите удалить все, что вы установили вручную, без ущерба для вашей ОС)