Gcc/usr/bin/ld: ошибка: не удается найти -lncurses
Я запускаю Ubuntu 12.04, и сейчас я работаю над проектом с использованием C, OpenGL, чайника и методов ввода.
Проблема началась, когда я решил использовать клавиши со стрелками. Я проверил, чтобы видеть коды клавиш для клавиш со стрелками, но все стрелки возвращают 0. Я посмотрел, как заставить это работать, и я нашел conio.h. К сожалению, это старый заголовок DOS, который недоступен для Linux. Затем я нашел замену под названием ncurses.
После установки необходимых библиотек, следуя инструкциям по сборке, я включил curses.h в мой источник main.c. Когда я впервые попытался скомпилировать gcc, я получил следующие ошибки:
main.o:main.c:function _Key: error: undefined reference to 'stdscr'
main.o:main.c:function _Key: error: undefined reference to 'wgetch'
main.o:main.c:function _Key: error: undefined reference to 'stdscr'
main.o:main.c:function _Key: error: undefined reference to 'wgetch'
Я нашел исправление, добавив -lncurses в make файл так:
SOURCES=main.c
main: main.o
gcc -lm -lGL -lGLU -lglut -lncurses main.o -o main
main.o: main.c
gcc -lm -lGL -lGLU -lglut -c main.c
Но меня встретила другая ошибка:
/usr/bin/ld: error: cannot find -lncurses
Как и предыдущие ошибки.
Я провел последние 2 дня, просматривая как форумы Ubuntu, так и StackOverFlow. Любая помощь будет оценена.
P.S. Я не знаю, важно ли это, но когда я пытаюсь запустить /usr/bin/ld, я получаю эту ошибку:
ld: fatal error: no input files
Ответы
Ответ 1
Для тех, у кого такая же проблема, у меня было: мне не хватало 32-битных библиотек; Я собирал 32-разрядный бит на 64-битном сервере, которому не хватало пакет lib32ncurses5-dev.
На Ubuntu я просто запускал:
sudo apt-get install lib32ncurses5-dev
Ответ 2
Во-первых, вы должны поместить библиотеки после объектного файла при связывании. И не иметь их вообще в компиляции исходного файла.
После этого, если ncurses не установлен в стандартной папке поиска, вам нужно указать на компоновщик, где он есть, это делается с помощью опции командной строки -L
:
gcc main.o -o main -L/location/of/ncurses -lm -lGL -lGLU -lglut -lncurses
Ответ 3
Попробуйте установить пакет ncurses-static
, если у вас установлен только пакет ncurses-devel
в вашей операционной системе Ubuntu.
Если это решает вашу проблему, плюс, если вы добавите команды компиляции @Joachim, вы можете отлично начать.
gcc main.o -o main -L/location/of/ncurses -lm -lGL -lGLU -lglut -lncurses
Компонент не может найти вашу общую библиотеку в пути поиска. Если вы добавите каталог, в котором ваша общая библиотека находится в переменной среды LD_LIBRARY_PATH
, компоновщик должен найти ее и уметь ссылаться на нее. В этом случае вы можете опустить параметр -L
в gcc:
gcc main.o -o main -lm -lGL -lGLU -lglut -lncurses
И он должен хорошо компилироваться.
EDIT:
Полезно знать, что apt-get install libncurses5-dev
устраняет вашу проблему.
FYI.
Переменная среды LD_LIBRARY_PATH
содержит список путей, разделенных двоеточиями, который используется компоновщиком для разрешения зависимостей библиотек во время выполнения. Эти пути будут иметь приоритет над стандартными путями библиотек /lib
и /usr/lib
. Стандартные пути будут по-прежнему искать, но только после исчерпания списка путей в LD_LIBRARY_PATH
.
Лучший способ использовать LD_LIBRARY_PATH
- установить его в командной строке или script непосредственно перед выполнением программы. Таким образом, вы можете сохранить новый LD_LIBRARY_PATH
изолированный от остальной части вашей системы, то есть локальный, к текущему запущенному экземпляру оболочки.
$ export LD_LIBRARY_PATH="/path/to/libncurses/library/directory/:$LD_LIBRARY_PATH"
$ gcc main.o -o main -lm -lGL -lGLU -lglut -lncurses