Как вы компилируете отдельные фрагменты в Nvidia PhysX? - PullRequest
0 голосов
/ 14 июля 2020

Я начал тестировать PhysX, экспериментируя с базовым c сниппетом Hello World, поставляемым программой.

Моя установка находится на Ubuntu 20.04.

Насколько я понимаю, исходный код для

/home/ubuntu1/PhysX/physx/bin/linux.clang/release/SnippetHelloWorld_64

находится в

/home/ubuntu1/PhysX/physx/snippets/snippethelloworld

Я пытался скомпилировать его с помощью

clang++ -I/home/ubuntu1/PhysX/physx/install/linux/PhysX/include \
-I/home/ubuntu1/PhysX/physx/install/linux/PxShared/include \
SnippetHelloWorld.cpp

, но у меня возникла ошибка

In file included from SnippetHelloWorld.cpp:39:
In file included from /home/ubuntu1/PhysX/physx/install/linux/PhysX/include/PxPhysicsAPI.h:45:
In file included from /home/ubuntu1/PhysX/physx/install/linux/PxShared/include/foundation/Px.h:37:
In file included from /home/ubuntu1/PhysX/physx/install/linux/PxShared/include/foundation/PxSimpleTypes.h:40:
/home/ubuntu1/PhysX/physx/install/linux/PxShared/include/foundation/PxPreprocessor.h:444:2: error: Exactly one of NDEBUG and _DEBUG needs to be defined!
#error Exactly one of NDEBUG and _DEBUG needs to be defined!
 ^
1 error generated.

Судя по всему, я должен писать код в среде. Почти все инструкции PhysX предназначены для Windows с использованием Visual Studio IDE.

Где я должен определить NDEBUG или _DEBUG, если моя цель - просто воспроизвести SnippetHelloWorld_64?

In другими словами, как я могу поэкспериментировать с HelloWorld в PhysX (с помощью командной строки Linux)?

1 Ответ

2 голосов
/ 25 июля 2020

Это были шаги, которые я использовал для сборки PhysX SDK в Ubuntu 18.04:

  • Установка зависимостей: sudo apt-get install clang, sudo apt-get install cmake, sudo apt-get install freeglut3-dev, sudo apt-get install libglew-dev, sudo apt-get install xterm и sudo apt-get install nvidia-cg-toolkit

Следуйте инструкциям в README.md, запустите generate_projects.sh и выберите параметр linux, который генерирует настройки cmake.

Go в PhysX-4.1/physx/compiler/linux-debug и запустите make, это заняло около 10 минут на моем ноутбуке и скомпилировал SDK, состоящий из множества .o.

И, наконец, cd в PhysX-4.1/physx/bin/linux.clang/debug, и вы сможете запустить ./SnippetHelloWorld_64 и другие демонстрации:

SnippetHelloWorld_64

РЕДАКТИРОВАТЬ:

SnippetHelloWorld.cpp зависит от целого ряда других файлов, таких как SnippetHelloWorldRender.cpp, таких вещей, как камеры, код обнаружения столкновений и т. Д. иначе из Physx API необходимо запустить этот конкретный пример, все они находятся в других файлах. Система make автоматически калибрует необходимые зависимости в одну большую команду ie. g++ -I./include SnippetHelloWorld.cpp physx.o octree.a anotherdependency.x ... -o SnippetHelloWorld_64 et c ... чтобы спасти вас от того, что вы пытаетесь сделать, то есть вручную разрешать все зависимости, что я бы не рекомендовал, если вы не пытаетесь извлечь пример голых костей с зависимостью из монолита Структура API, и в этом случае я бы по-прежнему использовал имеющуюся систему make и медленно, но верно удалял части API, пока у вас не будет минимального примера, который все еще строится (меняя направление каждый раз, когда он ломается по пути). В любом случае, вернемся к системе make. Это не только для однократного создания библиотеки, это полезно для непрерывной разработки, так как вы можете сделать первый раз, это займет много времени, потому что он собирает все, но затем, если вы измените некоторые файлы и снова запустите make, он только перекомпилирует файлы, которые вы изменили, и перестроите окончательный исполняемый файл, который отлично подходит для быстрой разработки, экспериментов и прототипирования, имея хорошо структурированную структуру проекта. Причина, по которой компилятор выдает эти ошибки, заключается в том, что эти определения в основном создаются компилятором автоматически для настройки системы make (grep символы отладки, и вы видите, что они определены в make-файле).

Короче говоря, используйте make система, это то, для чего она там. Если у вас есть причина, которая резко отличается от того, что я предположил в ответе, укажите ее, и я постараюсь помочь, но, кстати, система make - ваш друг в этом, создание всего api один раз будет медленным, но make снова, и он будет строить только измененные файлы.

...