Member 13541126 Ответов: 1

Я хочу построить OIS версии 1.3 под ubuntu 16.04. Когда я делаю "make", я получаю следующую ошибку?


Making all in src
make[1]: Entering directory '/home/mina/Downloads/ois-v1-3/src'
/bin/bash ../libtool  --tag=CXX   --mode=compile g++ -DHAVE_CONFIG_H -I. -I../includes  -I../includes -g -O2 -I/usr/X11R6/include    -g -O2 -MT LinuxJoyStickEvents.lo -MD -MP -MF .deps/LinuxJoyStickEvents.Tpo -c -o LinuxJoyStickEvents.lo `test -f './linux/LinuxJoyStickEvents.cpp' || echo './'`./linux/LinuxJoyStickEvents.cpp
libtool: compile:  g++ -DHAVE_CONFIG_H -I. -I../includes -I../includes -g -O2 -I/usr/X11R6/include -g -O2 -MT LinuxJoyStickEvents.lo -MD -MP -MF .deps/LinuxJoyStickEvents.Tpo -c ./linux/LinuxJoyStickEvents.cpp  -fPIC -DPIC -o .libs/LinuxJoyStickEvents.o
./linux/LinuxJoyStickEvents.cpp: In member function ‘virtual void OIS::LinuxJoyStick::capture()’:
./linux/LinuxJoyStickEvents.cpp:100:77: error: ‘read’ was not declared in this scope
   int ret = read(mJoyStick, &js, sizeof(struct input_event) * JOY_BUFFERSIZE);
                                                                             ^
./linux/LinuxJoyStickEvents.cpp: In static member function ‘static OIS::JoyStickInfoList OIS::LinuxJoyStick::_scanJoys()’:
./linux/LinuxJoyStickEvents.cpp:275:13: error: ‘close’ was not declared in this scope
     close(fd);
             ^
./linux/LinuxJoyStickEvents.cpp:283:12: error: ‘close’ was not declared in this scope
    close(fd);
            ^
./linux/LinuxJoyStickEvents.cpp: In static member function ‘static void OIS::LinuxJoyStick::_clearJoys(OIS::JoyStickInfoList&)’:
./linux/LinuxJoyStickEvents.cpp:294:20: error: ‘close’ was not declared in this scope
   close(i->joyFileD);
                    ^
Makefile:483: recipe for target 'LinuxJoyStickEvents.lo' failed
make[1]: *** [LinuxJoyStickEvents.lo] Error 1
make[1]: Leaving directory '/home/mina/Downloads/ois-v1-3/src'
Makefile:441: recipe for target 'all-recursive' failed
make: *** [all-recursive] Error 1


Что я уже пробовал:

make CC=gcc-4.4 CPP=g++-4.4 CXX=g++-4.4 LD=g++-4.4


Making all in src
make[1]: Entering directory '/home/mina/Downloads/ois-v1-3/src'
/bin/bash ../libtool  --tag=CXX   --mode=compile g++-4.4 -DHAVE_CONFIG_H -I. -I../includes  -I../includes -g -O2 -I/usr/X11R6/include    -g -O2 -MT LinuxJoyStickEvents.lo -MD -MP -MF .deps/LinuxJoyStickEvents.Tpo -c -o LinuxJoyStickEvents.lo `test -f './linux/LinuxJoyStickEvents.cpp' || echo './'`./linux/LinuxJoyStickEvents.cpp
libtool: compile:  g++-4.4 -DHAVE_CONFIG_H -I. -I../includes -I../includes -g -O2 -I/usr/X11R6/include -g -O2 -MT LinuxJoyStickEvents.lo -MD -MP -MF .deps/LinuxJoyStickEvents.Tpo -c ./linux/LinuxJoyStickEvents.cpp  -fPIC -DPIC -o .libs/LinuxJoyStickEvents.o
../libtool: line 1763: g++-4.4: command not found
Makefile:483: recipe for target 'LinuxJoyStickEvents.lo' failed
make[1]: *** [LinuxJoyStickEvents.lo] Error 1
make[1]: Leaving directory '/home/mina/Downloads/ois-v1-3/src'
Makefile:441: recipe for target 'all-recursive' failed
make: *** [all-recursive] Error 1

Richard MacCutchan

В исходном коде есть ошибки, поэтому вам нужно вернуться к тому месту, где вы получили этот дистрибутив, чтобы посмотреть, был ли он исправлен.

1 Ответов

Рейтинг:
9

Jochen Arndt

Отсутствующие функции-это стандартные библиотечные функции языка Си, объявленные в запустите.ч Поэтому должно быть достаточно включить этот файл в исходники.

Но смотри сюда: Добавление стандартного заголовка для LINUX · wgois/OIS@47eeab5 · GitHub[^]
Она была исправлена в 2012 году и в текущей версии 1.4 (GitHub - wgois/OIS: официальный репозиторий OIS. Объектно-ориентированная система ввода[^]) включать те.


Member 13541126

Успешно установлен и сгенерирован lib в пути:/usr/local/lib
Теперь я пытаюсь добавить этот путь в LD_LIBRARY_PATH вручную в файл .bashrc, он не может быть обнаружен..почему??
Я имею в виду, что при попытке создать свое приложение я получил сообщение:
OIS_DIR-НЕ НАЙДЕН

Jochen Arndt

/usr/local/lib обычно это уже часть пути поиска библиотеки. Если библиотека не может быть найдена, вы также получите другое сообщение об ошибке, например
"somelib-version.so: cannont open shared object file: нет такого файла или каталога".

Рекомендуемый способ добавления библиотечных путей - это добавление пути (/usr/local/lib) в текстовый файл /etc/ld.so.conf и выполнить ldconfig (как корень).

OIS_DIR-процесс является, вероятно, порождается функция в библиотеке или принять файл. Вы должны прочитать документацию и примеры того, как использовать и создавать библиотеку. Это может потребовать установки пути программой программно, переменной среды или конфигурационным файлом.

Вы также можете найти исходные файлы для этой строки с помощью команда grep чтобы знать, когда это будет распечатано и при каких условиях.

Member 13541126

Спасибо слишком много

Member 13541126

"OIS_DIR-NOTFOUND, вероятно, генерируется функцией в библиотеке или файлом make. Вы должны прочитать документацию и примеры того, как использовать и создавать библиотеку. Это может потребовать установки пути программой программно, переменной среды или конфигурационным файлом."

Вот часть файла CMakeList:
##############
# Людоед 1.9.x #
##############

# Если для Ogre не указан пользовательский путь, посмотрите, указывают ли на него системные переменные среды.
if(не OGRE_HOME)
set(OGRE_HOME $ENV{OGRE_HOME} CACHE PATH "базовый каталог для поиска Ogre.")
строка(регулярное выражение заменить "\ \ \ \ "" / " OGRE_HOME "${OGRE_HOME}")
endif(не OGRE_HOME)

если(WIN32)
set(CMAKE_MODULE_PATH ${OGRE_HOME}/CMake ${CMAKE_MODULE_PATH})
else(WIN32)
комплект(CMAKE_MODULE_PATH ${OGRE_HOME}/lib в/огр/CMake, например, /usr/местные/библиотека/огра-х ${CMAKE_MODULE_PATH})
endif(WIN32)

find_package(огр тихий)
if(OGRE_FOUND)
если(не "${OGRE_VERSION_NAME}" STREQUAL "Ghadamon")
сообщение(предупреждение "вы компилируете против версии Ogre ${OGRE_VERSION_NAME}, хотя тестируется только Ghadamon (Ogre 1.9). Могут возникнуть проблемы...")
за endif()

if(NOT ${OGRE_Terrain_FOUND})
сообщение("не удалось найти компонент terrain в вашем дистрибутиве Ogre.")
комплект(CLIENT_DEPENDENCIES_NOT_MET правда)
за endif()

find_package(OIS QUIET)
if(не OIS_FOUND)
сообщение("не удалось найти OIS в вашей системе.")
комплект(CLIENT_DEPENDENCIES_NOT_MET правда)
endif(не OIS_FOUND)
остальное(OGRE_FOUND)
сообщение("не удалось найти Ogre3D в вашей системе.")
комплект(CLIENT_DEPENDENCIES_NOT_MET правда)
endif(OGRE_FOUND)


################
# Сборка клиента #
################

# Проверьте наличие зависимостей и определите цель, если все библиотеки доступны.
if(CLIENT_DEPENDENCIES_NOT_MET)
сообщение("графический клиент не строится, так как некоторые зависимости не выполняются.")
else(CLIENT_DEPENDENCIES_NOT_MET)
#################################################################################
В проектной документации указано, что :

"После установки всех библиотек вам необходимо установить следующие переменные окружения:

RTF_HOME должен указывать на каталог пакета RTF

OGRE_HOME должен указывать на домашний каталог OGRE
"
каждый раз, когда я получал эти сообщения:
Не удалось найти OIS в вашей системе.
Графический клиент не строится, так как некоторые зависимости не выполняются.

Мне нужна ваша помощь пожалуйста

Jochen Arndt

Это сценарий для OGRE, а не для OIS.

Однако,

"Не удалось найти OIS в вашей системе"

сообщает вам, что OIS не может быть найден. Наиболее распространенная причина заключается в том, что вы забыли установить его после сборки (обычно путем выполнения make install как root) или не задали требуемую переменную окружения.

Это должно быть упомянуто в документации OIS и, вероятно, также в документации по установке OGRE.

Или проверьте сценарий, чтобы проверить, что именно find_package(OIS QUIET) делает, чтобы знать, для чего он ищет.

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