安装和连接-惊人的图书馆Debian Linux
题
我试图让-惊人工作使用Ubuntu。
第一,我下载的SDK在这里:
接下来,我提取的文件和安装各个包:
dpkg -i filename.deb
这给我下文件/usr/lib/-惊人/v2。8.1:
- libNxCharacter.所以
- libNxCooking.所以
- libPhysXCore.所以
- libNxCharacter.此。1
- libNxCooking.此。1
- libPhysXCore.此。1
接下来,我创建了象征性的链接to/usr/lib:
sudo ln -s /usr/lib/PhysX/v2.8.1/libNxCharacter.so.1 /usr/lib/libNxCharacter.so.1
sudo ln -s /usr/lib/PhysX/v2.8.1/libNxCooking.so.1 /usr/lib/libNxCooking.so.1
sudo ln -s /usr/lib/PhysX/v2.8.1/libPhysXCore.so.1 /usr/lib/libPhysXCore.so.1
现在,利用日食了,我已指定以下图书馆(l):
- libNxCharacter.此。1
- libNxCooking.此。1
- libPhysXCore.此。1
和下面搜索的路径只是在情况(L):
- /usr/lib/-惊人/v2。8.1
- /usr/lib
此外,作为杰拉尔德*Kaszuba建议,我增加了以下包括路径(-I):
- /usr/lib/-惊人/v2。8.1
- /usr/lib
然后,我试图汇编的下列代码:
#include "NxPhysics.h"
NxPhysicsSDK* gPhysicsSDK = NULL;
NxScene* gScene = NULL;
NxVec3 gDefaultGravity(0,-9.8,0);
void InitNx()
{
gPhysicsSDK = NxCreatePhysicsSDK(NX_PHYSICS_SDK_VERSION);
if (!gPhysicsSDK)
{
std::cout<<"Error"<<std::endl;
return;
}
NxSceneDesc sceneDesc;
sceneDesc.gravity = gDefaultGravity;
gScene = gPhysicsSDK->createScene(sceneDesc);
}
int main(int arc, char** argv)
{
InitNx();
return 0;
}
第一个错误我是:
NxPhysics.h:没有这样的文件或录
这告诉我,该项目显然是不连接正常。任何人都可以告诉我,我做了什么错误的,或者什么别的我需要做的就是我的项目汇编?我使用的海湾合作委员会用C++编译器。在此先感谢!
解决方案
它看起来就像你是混乱的头文件图书馆的文件。NxPhysics.h是一个源代码头的文件。头文件时,需要编译源代码(不在联)。它可能位于一样的地方/usr/包括or/usr/include/-惊人/v2。8.1,或者相似。找到真正的位置,这个文件,并确保使用的-我的选择告诉了编译器,作为杰拉尔德*Kaszuba建议。
该图书馆所需的时连接的编目的文件(而不是当编制).你会需要处理这个后面的-L-l的选择。
注:这取决于你如何调海湾合作委员会,你可以把它做的编制,然后与一个单一的援引,但在幕后它仍然没有一个编译步骤然后一个链接的步骤。
编辑: 额外的解释。
当建立一个二进制使用C++编译器,编译器可读的源代码(.c。cpp文件)。同时阅读它,还有经常#包括使用的语句读。h文件。#Include的发言得到姓名的文件必须载入。这些精确的文件,必须存在于包括道路。在你的情况下,文件的确切名称"NxPhysics.h"必须找到某个地方在包括道路。通常,/usr/包括是在路径通过默认,因此是当前的目录。如果标题是在其他地方,例如一个子目录/usr/包括,然后你总是需要明确地告诉编译器在哪里看使用的-我的命令行开关(或有时候与环境变量或其他系统的配置的方法)。
A.h头文件通常包括数据结构的声明,内联的功能定义、职能和类声明和界定宏。当汇编完成后,一个.o目文件被创建。编译器不会知道的。所以或.一个图书馆和无法使用他们在任何方式,其中嵌入了一点点帮助的信息的链接。请注意,编译器还嵌入了一些"头"信息对象的文件。我把"头"报价,因为该信息仅仅大约相当于什么可以或不可以发现在.h文件。它包括一个二元表示的所有出口的声明。没有宏在那里找到。我认为,内联职能的省略以及(虽然我可能是错的,那里)。
一旦所有的.o文件存在,现在是时候让另一个程序采取:链接器。连接什么都不知道的源代码文件或.h头文件。它只在乎二库和目标的文件。你给它一个收藏图书馆和目标文件。在他们的"头"他们列出了什么事(数据的类型、功能,等等。) 他们确定和什么事情,他们需要别人来界定。连接则相匹配起来的要求的定义,从一个模块的实际定义的其他模块。它检查,以确保没有多个相互冲突的定义,如果建立一个可执行的,它可以确保所有要求的定义得到满足。
有一些值得注意的事项上述说明。第一,它是可以呼叫海湾合作委员会一次,并获得这样做这两个汇编和链接,例如
gcc hello.c -o hello
将首先编好。c来存储器或一个临时文件,然后这将对标准图书馆和写出你好可执行的。虽然这只是一个调到海湾合作委员会,这两个步骤仍然被依次进行,以便利而设。我会跳过了描述一些细节的动态图书馆。
如果你是一个Java程序,则上述的一些可能是一个有点令人困惑。我相信这一点。净样工作的Java,因此以下的讨论应该适用于C#和其他。净的语言。Java是语法上的一个更简单的语言比C和C++。它缺乏宏以及它缺乏真正的模板(泛型是一个非常薄弱的模板形式).因此,Java跳过需要单独宣言》(.h)和定义(.c)的文件。它还能够嵌入所有相关信息的对象的文件(.类Java)。这使得它如此,这两个编译器和连接可以使用。类文件。
其他提示
问题的确是我的包括路径。这里是相关的命令:
g++ -I/usr/include/PhysX/v2.8.1/SDKs/PhysXLoader/include -I/usr/include -I/usr/include/PhysX/v2.8.1/LowLevel/API/include -I/usr/include/PhysX/v2.8.1/LowLevel/hlcommon/include -I/usr/include/PhysX/v2.8.1/SDKs/Foundation/include -I/usr/include/PhysX/v2.8.1/SDKs/Cooking/include -I/usr/include/PhysX/v2.8.1/SDKs/NxCharacter/include -I/usr/include/PhysX/v2.8.1/SDKs/Physics/include -O0 -g3 -DNX_DISABLE_FLUIDS -DLINUX -Wall -c -fmessage-length=0 -MMD -MP -MF"main.d" -MT"main.d" -o"main.o" "../main.cpp"
此外,对于连接,只有"PhysXLoader"需要(同Windows)。因此,我有:
g++ -o"PhysXSetupTest" ./main.o -lglut -lPhysXLoader
同时安装,我得到了以下错误 *
dpkg: dependency problems prevent configuration of libphysx-dev-2.8.1:
libphysx-dev-2.8.1 depends on libphysx-2.8.1 (= 2.8.1-4); however:
Package libphysx-2.8.1 is not configured yet.
dpkg: error processing libphysx-dev-2.8.1 (--install):
dependency problems - leaving unconfigured
Errors were encountered while processing:
* 因此,我重新安*libphysx-2.8.1_4_i386.黛比*
sudo dpkg -i libphysx-2.8.1_4_i386.deb