我试图让-惊人工作使用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 
许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top