研究Ogre引擎和Nebula引擎 我的主页 http://www.hjpdiy.com 我的邮箱 hanjumail@hotmail.com
关于LNK2005在对象中已定义符号
Visual C++ 概念:生成 C/C++ 程序
链接器工具错误 LNK2005在对象中已定义符号
以修饰形式显示的给定 symbol 被多次定义。
可能的原因
不慎同时与单线程库和多线程库链接。确保应用程序项目文件只包括适当的库,并且任何第三方库已适当创建了单线程或多线程版本。
在也使用 /clr 时混合静态库和动态库。
该符号为封装函数(通过用 /Gy 编译创建),包含在多个文件中,但在各编译间已改变。重新编译所有包含 symbol 的文件。
以不同的形式在不同库中的两个成员对象中定义了该符号,并且使用了这两个成员对象。
某个绝对符号被定义两次,而每次定义的值不同。
头文件声明并定义了变量。可能的解决方案有:
在 .h 中声明变量:extern BOOL MyBool;,然后在 .c 或 .cpp 文件中向它分配:BOOL MyBool = FALSE;。
将变量声明为 static。
将变量声明为 selectany。
当将 uuid.lib 与定义 GUID 的其他 .lib 文件(例如 oledb.lib 和 adsiid.lib)一起使用时。例如:
oledb.lib(oledb_i.obj) : error LNK2005: _IID_ITransactionObject
already defined in uuid.lib(go7.obj)
若要修复,请将 /FORCE:MULTIPLE 添加到链接器命令行选项,并确保 uuid.lib 是引用的第一个库。
有关更多信息,请参见知识库文章:
Q148652,PRB: LNK2005 Errors When Link C Run-Time Libraries Are Linked Before MFC Libraries。
Q140440,FIX: Global Overloaded Delete Operator Causes LNK2005。
Q184235,PRB: LNK2005 Errors on New and Delete When Defining _ATL_MIN_CRT。
该错误之后为致命错误 LNK1169。
Ogre游戏引擎鼠标选取物体演示
Ogre游戏引擎鼠标选取物体演示
韩举(喝水不上火)
http://www.hjpdiy.com
http://hjblog.blogchina.com
声明:
该演示只是起到抛砖引玉的作用,转载请保持本文章完整性,请保持作者信息。
由于Ogre推出了最新的Release1版,为了适应该版本所以延迟了几天,不过还好问题解决了,主要是(GUI方面的)。
Ogre是开源的图形渲染引擎见http://www.ogre3d.org,该引擎很有名,在网上可以找到很多相关的信息。
言归正传,这个演示程序演示了在Ogre中进行鼠标选取物体,而且还能检测出鼠标具体击中了该物体的哪个面,用专业点的说法就是"射线与面(三角型)的碰撞检测"。
注意:
该程序采用Esc键退出。
该演示程序为VC7.1(2003)工程,需要最新的Ogre 1.0.0 Release的支持。
编译前的目录设置:(注意下面目录为我机器目录,请设为你自己的目录)
包含文件目录(include)
D:\OgreRc1\ogrenew\Dependencies\include\
D:\OgreRc1\ogrenew\Dependencies\include\CEGUI
D:\OgreRc1\ogrenew\OgreMain\include
库文件设置(lib)
D:\OgreRc1\ogrenew\OgreMain\lib\debug
D:\OgreRc1\ogrenew\Dependencies\lib\Debug
重点函数
getClickAt函数:该函数主要是调用Ogre的Ray检测判断哪个物体被选中,该函数可以用于在多个物体中判断鼠标选中的物体。
PickTest函数:该函数用于判断"鼠标是否选中某个物体(调用getClickAt函数),以及选中该物体的哪个面"。
HJSDK命名空间:我自己仿照Ogreode写的碰撞检测引擎,用来检查碰撞面。
代码下载(编译后如果不能正常运行,请把可执行文件复制到 \ogrenew\Samples\Common\bin\Debug\下)
http://www.hjpdiy.com/docdoc/OgrePickTest.rar 注意该文件已经针对(OGRE 1.0.0 Final Feb 23, 2005 - 03:44 PM by sinbad)进行了修正。





可能的问题:
对于有骨骼动画的mesh可能不能正常识别。
其实一开始想写个简单的 "3d魔方程序"然后发布出来,结果现在突然想学学Cg动画(maya)所以先把这个东西发出来,见笑见笑
异地编译Nebula2中的工程
异地编译Nebula2中的工程
韩举(喝水不上火)
Nebula2是一个开源的免费的游戏引擎(省去2000字,可以到google搜索一下)
比如physdemo工程(下面是我提取出来的physdemo例子)
http://blog.blogchina.com/upload/2005-01-30/20050130171548601176.rar
注意下面提到的目录都是我存放Nebula2的目录,请修改为你自己的目录
设置include目录
D:\Nebula2_SDK\nebula2\code\nebula2\inc\
D:\Nebula2_SDK\nebula2\code\contrib\nopende\inc
设置Lib目录
D:\Nebula2_SDK\nebula2\build\vstudio71\inter\win32d
D:\Nebula2_SDK\nebula2\code\contrib\nopende\lib\win32_vc_i386
打开startup.tcl
找到这个函数
proc OnGuiServerOpen {}
{
修改下面语句,这是我的目录把他改成你自己的目录
.settextureprefix "D:/cvs_Netbula2/nebula2/export/textures/system/"
}
正常的话程序就应该可以运行了。
提取及编译时碰到的问题
1、incldue、lib中引入的文件可能和Ogre有冲突主要表现在Ode.lib文件上,如果你能正常编译工程,但是不能正常运行,应该首先考虑这个问题。
2、提取时发现下图画红圈的地方必须设置,否则编译出错(注意每个文件的设置不同)
不用放在Ogre相关目录的工程。
这是一个对应着Ogre的"演示工程",这个工程可以不用放在Ogre的目录中编译(当然你要设置Include和Lib)的路径,这个工程完全符合VC的习惯。
http://blog.blogchina.com/upload/2005-01-29/2005012900232945357.rar
Ogre编译时ZM的设置位置(上面工程已经设置)