Installation und Anbindung die PhysX-Bibliotheken in Debian Linux
Ich versuche PhysX arbeiten mit Ubuntu.
Erste, die ich heruntergeladen habe die SDK hier:
Als Nächstes habe ich die Dateien extrahiert und installiert jedes Paket mit:
dpkg -i filename.deb
Dieser gibt mir folgende Dateien im Verzeichnis /usr/lib/PhysX/v2.8.1:
- libNxCharacter.so
- libNxCooking.so
- libPhysXCore.so
- libNxCharacter.so.1
- libNxCooking.so.1
- libPhysXCore.so.1
Als Nächstes erstellte ich einen symbolischen Link auf /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
Nun mit Eclipse habe ich Folgendes angegeben libraries (-l):
- libNxCharacter.so.1
- libNxCooking.so.1
- libPhysXCore.so.1
Sowie die folgende Suchpfade nur im Fall (-L):
- /usr/lib/PhysX/v2.8.1
- /usr/lib
Auch, wie Gerald Kaszuba vorgeschlagen, habe ich noch folgende include paths (-I):
- /usr/lib/PhysX/v2.8.1
- /usr/lib
Dann habe ich versucht zu kompilieren, den folgenden code:
#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;
}
Den ersten Fehler, den ich bekomme, ist:
NxPhysics.h: No such file or directory
Was mir sagt, dass das Projekt offensichtlich nicht die Verlinkung richtig. Kann mir jemand sagen was ich falsch gemacht habe, oder was muss ich tun, um mein Projekt zu kompilieren? Ich bin mit dem GCC-C++ - Compiler. Vielen Dank im Voraus!
- Dieser link hat die installation Anweisungen, die für mich gearbeitet freespace.virgin.net/hugo.elias/models/m_cloth.htm
- Das ist etwas nicht, sondern jemand anderes, der stolpert über diesen Beitrag, während Sie versuchen, um PhsyX SDK 3.0 auf linux, ich fand diese Seite sehr hilfreich: über.etwas.pl/Kunst/...
Du musst angemeldet sein, um einen Kommentar abzugeben.
Es sieht aus wie du bist verwirrend header-Dateien mit Bibliothek-Dateien. NxPhysics.h ist ein source code header file. Header-Dateien werden benötigt beim kompilieren von source-code (nicht als Verlinkung). Es ist wahrscheinlich, gelegen in einem Ort wie /usr/include oder /usr/include/PhysX/v2.8.1, oder ähnlich. Finden Sie die wahre Position dieser Datei und stellen Sie sicher, Sie verwenden die option-I auf, sagen dem compiler, wo es ist, wie Gerald Kaszuba schlägt.
Den Bibliotheken benötigt werden, wenn die Verknüpfung der kompilierten Objekt-Dateien (und nicht beim kompilieren). Sie müssen sich mit diesem später mit der -L-und-l-Optionen.
Hinweis: je nachdem, wie Sie aufrufen, gcc, können Sie es tun, kompilieren und verknüpfen mit einem einzigen Aufruf, aber hinter den kulissen tut es noch immer einen compile-Schritt wird dann ein link-Schritt.
EDIT: Zusätzliche Erklärung Hinzugefügt...
Beim Bau einer binären mit einer C/C++ - compiler liest der compiler den source-code (.c oder .cpp-Dateien). Beim Lesen ist es, es sind Häufig die #include-Anweisungen, die verwendet werden, zu Lesen .h-Dateien. Die #include-Anweisungen geben, die Namen der Dateien, die geladen werden muss. Die genauen Dateien muss vorhanden sein, in den include-Pfad. In Ihrem Fall, eine Datei mit dem exakten Namen "NxPhysics.h" muss gefunden werden, irgendwo im include-Pfad. Typischerweise /usr/include ist in den Pfad per default, und so ist das aktuelle Verzeichnis. Wenn die Header sind woanders wie ein Unterverzeichnis von /usr/include, dann muss man immer ausdrücklich sagen dem compiler, wo suchen Sie mit der -I Befehl-Linie Schalter (oder manchmal auch mit Umgebungsvariablen oder andere system-Konfiguration, Methoden).
Ein .h-header-Datei enthält in der Regel Daten-Struktur-Deklarationen, Definitionen der inline-Funktion, function und class-Deklarationen und #define-Makros. Wenn die Zusammenstellung erfolgt ist, ein .o Objekt-Datei erstellt wird. Der compiler weiß nicht, über .so oder so .ein Bibliotheken-und nicht in irgendeiner Weise, andere als zum einbetten ein wenig von Helfer-Informationen für den linker. Beachten Sie, dass der compiler bettet auch einige "header" - Informationen in die Objekt-Dateien. Ich "header" in Anführungszeichen, weil die Informationen nur, entspricht etwa dem, was kann oder kann nicht gefunden werden in der .h-Dateien. Es enthält eine binäre Darstellung aller exportierten Deklarationen. Keine Makros, die man dort findet. Ich glaube, dass inline-Funktionen weggelassen, wie gut (obwohl ich falsch sein könnte, es).
Einmal alle .o-Dateien vorhanden sind, ist es Zeit für ein anderes Programm zu übernehmen: der linker. Der linker weiß nichts von source-code-Dateien oder .h header-Dateien. Es kümmert sich nur über binäre Bibliotheken und Objekt-Dateien. Sie geben ihm eine Sammlung von Bibliotheken und Objekt-Dateien. In Ihren "überschriften", die Sie auflisten, welche Dinge (Datentypen, Funktionen, etc.) Sie definieren und welche Dinge Sie brauchen jemanden anderes zu definieren. Der linker dann entspricht Anforderungen von Definitionen aus einem Modul mit aktuellen Definitionen für andere Module. Es überprüft, um sicherzustellen, dass es nicht mehrere widersprüchliche Definitionen, und, wenn das erstellen einer ausführbaren Datei, es macht Sie sicher, dass alle Anforderungen für die Definitionen sind erfüllt.
Gibt es einige Bemerkenswerte Einschränkungen zu der obigen Beschreibung. Erstens, es ist möglich, den Anruf gcc einmal und bekommen es zu tun sowohl kompilieren und verknüpfen, z.B.
zuerst kompilieren hello.c im Speicher oder in einer temporären Datei, dann wird er link gegen die standard-Bibliotheken, und Sie schreiben die hello executable. Auch wenn es nur ein Aufruf von gcc, die beide Schritte sind noch nacheinander ausgeführt, als Service für Sie. Werde ich überspringen, die beschreiben, die einige der details der dynamischen Bibliotheken für jetzt.
Wenn Sie ein Java-Programmierer sind, dann werden einige der oben könnte ein wenig verwirrend sein. Ich glaube, dass .klappt net wie Java, so dass die folgende Diskussion sollte es auch für C# und andere .net-Sprachen. Java ist syntaktisch eine viel einfachere Sprache als C und C++. Es fehlt Makros und es fehlt echte templates (generics sind eine sehr schwache form von Vorlagen). Weil dieses, Java überspringt die Notwendigkeit für separate Deklaration (.h) und definition (.c) Dateien. Es ist auch einbetten können alle relevanten Informationen in die Objekt-Datei (.Klasse für Java). Dieser macht es so, dass der compiler und der linker kann verwenden die .die class-Dateien direkt.
War das problem zwar mit meinem include-Pfaden. Hier ist der entsprechende Befehl:
Auch für den linker, nur "PhysXLoader" erforderlich ist (genauso wie Windows). Also, ich habe:
Während der Installation bekam ich die folgende Fehlermeldung
*
*
Also habe ich neu installiert *libphysx-2.8.1_4_i386.deb*