Связывание ошибок при попытке скомпилировать Fubi

Эта проблема относится не только к Fubi, но и к общей проблеме компоновщика. Последние несколько дней (читай как 5) были полны ошибок компоновки, но мне удалось сузить их до нескольких.

Я пытаюсь скомпилировать Fubi (фреймворк Full Body Interaction) в среде Linux. Он был протестирован только на Windows 7, а в Интернете не хватает ресурсов для компиляции на платформе * nix.

Теперь, как я упоминал выше, у меня было множество проблем с линковкой, которые в основном касались некорректных флагов g ++. Fubi требует OpenNI и NITE (а также OpenCV, если хотите), чтобы обеспечить базовую функциональность. Мне удалось успешно скомпилировать оба примера из платформ OpenNI и NITE.

Насколько я понимаю, Fubi — это фреймворк, поэтому мне нужно будет скомпилировать разделяемую библиотеку, а не двоичный файл.

Когда я пытаюсь скомпилировать его как двоичный файл, используя следующую команду

g++ *.cpp -lglut -lGL -lGLU -lOpenNI -lXnVNite_1_5_2 -I/usr/include/nite -I/usr/include/ni -I/usr/include/GL -I./GestureRecognizer/ -o FubiBin

и я получаю выход, расположенный Вот. (Это вроде долго и я не хотел портить формат)

Если я вместо этого скомпилирую в объектные файлы (флаг -c), ошибок не будет, и он успешно создаст объектные файлы. Обратите внимание, я использую следующую команду:

g++ -c *.cpp -lglut -lGL -lGLU -lOpenNI -lXnVNite_1_5_2 -I/usr/include/nite -I/usr/include/ni -I/usr/include/GL -I./GestureRecognizer/

Затем я могу использовать ar Команда для создания статически связанной библиотеки. Ошибка [вероятно] не возникает (это только предположение с моей стороны), потому что она еще не прошла через компоновщик, поэтому эти ошибки не появятся.

Спасибо за терпение и чтение всего этого. Наконец, вопрос времени:

1) Является ли первая ошибка относительно неопределенная ссылка на главную нормально при попытке скомпилировать в бинарный файл? Я искал все файлы в этой папке, а не один главный функция существует.

2) Остальные неопределенные ошибки ссылок жалуются, что не могут найти упомянутые функции. Все эти функции находятся в файлах .cpp и .h в подкаталоге. GestureRecognizer / который является подкаталогом пути, в котором я компилирую. Так что параметр не будет -I./GestureRecognizer/ позаботиться об этой проблеме?

Я хочу быть уверен, что при создании общей библиотеки у меня не будет проблем со связыванием во время выполнения. Исчезнут ли все эти ошибки при попытке скомпилировать в двоичный файл, если они изначально были правильно связаны?

0

Решение

Вы говорите компилятору создать исполняемый файл при первом вызове, а исполняемый файл нуждается в main() функция, которую он не может найти. Так что нет, ошибка не нормальная. Чтобы создать общую библиотеку, используйте для этого опцию «-shared» в GCC. Попытка некоторого тестового кода здесь, в моей системе, он также хочет «-fPIC» при компиляции, но это может отличаться. Лучшей идеей является анализ командных строк компилятора и компоновщика нескольких других библиотек, которые правильно собираются в вашей системе.

Чтобы добавить отсутствующие символы из подкаталогов, вы также должны скомпилировать их: g++ *.cpp ./GestureRecognizer/*.cpp ..., «-I …» только говорит компилятору, где искать, когда он находит #include ..., Я не удивлюсь, если бы в этом даже не было необходимости, многие проекты используют #include "GestureRecognizer/Foo.h" достичь этого напрямую.

КСТАТИ:

  • Попробуйте активировать предупреждения при запуске компилятора («-W …»).
  • Вы можете разделить компиляцию («-c») и компоновку. В обоих случаях используйте «g ++». Это должно сократить время обработки при тестировании различных настроек компоновщика.
0

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]