c++ - 编译使用 Open Dynamics Engine v0.13.1 的文件时出现“对 * 的未定义引用”错误
问题描述
我是组织 C++ 项目的初学者,我已经尝试启动 Open Dynamics Engine 项目一周了,但我一直遇到几个错误。首先,我做了什么:
- 按照手册中的指示使用 automake 安装 ode-0.13.1 。
- 使用弹跳球 HOWTO
test.cpp
中的代码创建了一个文件。 - 写了一个makefile来编译。
但是当我运行我的 makefile 时,我收到以下错误:
gcc -Wall -g -DdDOUBLE -o test test.o -L/home/username/ode-0.13.1/ode/src/libode.la -L/home/username/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):在函数 sincosdxStepBody(dxBody*, double)': /home/username/ode-0.13.1/ode/src/util.cpp:618: undefined reference to
'/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):在函数运算符 new[](unsigned long)' /home/username/ode-0.13.1/OPCODE/OPC_AABBTree.cpp:427:未定义的操作码
Opcode::AABBTree::Build(Opcode::AABBTreeBuilder*)': /home/username/ode-0.13.1/OPCODE/OPC_AABBTree.cpp:413: undefined reference to
引用operator new[](unsigned long)' /usr/local/lib/libode.a(OPC_AABBTree.o): In function
::AABBTreeNode::~AABBTreeNode()': /home/username/ode-0.13.1/OPCODE/OPC_AABBTree.cpp:83: undefined reference tooperator delete[](void*, unsigned long)' /usr/local/lib/libode.a(OPC_Collider.o): In function
Opcode::Collider::~Collider()': /home/username/ ode-0.13.1/OPCODE/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
对 __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
这些错误似乎库没有正确设置,但我很确定我已经正确安装并且我的 -L 设置为正确的路径。
注 1: ode 库中包含的演示可以工作。
注意 2:我之前曾尝试(但失败)安装其他版本的 ode。我尽力清理make uninstall
并make clean
清理了这些失败的安装,但我认为它们可能会影响新安装,因为当我sudo make install
第一次运行时,会出现大量Nothing to do here...
消息。
解决方案
推荐阅读
- sql - sql select查询中“部分匹配”的最标准标准是什么?
- java - How to get a size of a image file which is inside a folder which is inside a zip file
- angular - NgRx - 如何从状态中正确选择
- common-table-expression - Using a CTE to group rows based on recursive logic
- react-native - putting words in react native shapes
- simulation - 如何在同一个提货区同时选择确切的等待数量和可用数量?
- java - Import of test package not possible
- java - 如何在 JPA(休眠)中将一对多关系与复合主键映射?
- .net - Convert a long/lat on Mercator Projection with specific area and zoom to a (X,Y) point with VB.NET
- python - How to print out the max and min without a definite list?