Yellow leaf - статті - рішення проблем, що виникають при виконанні команд

Іноді стандартна послідовність для компіляції програми не працює. Вона починає виводити різні помилки і не компілює програму. Що в такому випадку робити? У цій статті описано як позбутися від безлічі часто зустрічаються помилок.

Увага: В цій статті мається на увазі, що у вас вже є деяка кількість знань в області роботи з командним рядком і ви знаєте як працювати з менеджером пакунків дистрибутиву.

Помилки при виконанні команди ./configure

Помилки при виконанні команди make

Помилки при виконанні команди make install

Помилки при виконанні команди ./configure

Наступний список містить деякі загальні помилки, які може видати каманда ./configure. Помилки відсортовані за частотою виникнення. Спочатку найбільш часто зустрічаються. Речі між (і) є опціональними, вони можуть не з'являтися. OR, виділене жирним курсивом означає, що кілька помилок мають одне рішення. текст між <и> показує тип рядка, яка повинна з'явитися в цьому місці.

(Configure :) (error :) (Ltsomeversiongt (or higher)) not found. (Please check your installation!) OR checking for . (Configure :) (error :) not found. OR (configure :) (error :) ( (Or newer)) is required to build

Це зазвичай означає що -dev або -devel версія пакету, який називається не встановлена ​​у вас на комп'ютері. Використовуйте менеджеру пакунків дистрибутива (або будь-який інший спосіб знайти і встановити пакет), щоб знайти пакет і встановити його, якщо це можливо, -dev або -devel версію. Якщо -dev або -devel версія вже встановлена, або її НЕ сущечтвует, подивитися на версію вже встановленої. Вона досить нова? Якщо вона нижче, ніж , спробуйте оновити пакет. Якщо оновити пакет не представляється можливим, ви можете спробувати скомпілювати більш МТАР версію програми. Більш старі версії зазвичай використовують більш старі версії бібліотек і програм, необхідних для компіляції.

(Configure :) (error :) can not find header (file) .h OR (configure :) (error :) (header) (file) .h missing! OR

Конфігураційний скрипт не може знайти .h файл, необхідний для компіляції. Ця помилка схожа на попередню, в якій необхідно встановити -dev або -devel версію пакету. Однак, як правило, не зрозуміло який пакет потрібно встановити для вирішення цієї проблеми, так як може бути дуже загальною назвою. Спробуйте пошукати в інтернетет .h, щоб дізнатися в якому пакеті цей файл знаходиться, а потім встановіть цей пакет (і його -dev або -devel версія, якщо це можливо) за допомогою менеджера пакетів вашого дистрибутива.

(Configure :) (error :) no acceptable cc found in

Ви використовуєте для установки компілятор gcc, А змінна оточення CC відсутня або не встановлена. Переконайтеся, що пакет gcc встановлений, використання менеджеру пакунків дистрибутива. Якщо цей пакет не встановлено, встановіть його. Якщо він встановлений, спробуйте виконати наступну команду:

Якщо це допомогло, ви можете додати цю команду в / etc / profile (це файл, який містить команди, які виконуються коли користувач входить в систему) і тоді вам не доведеться набирати її знову.

(Configure :) (error :) C ++ preprocessor "/ lib / cpp" fails sanity check

Ваш пакет g ++ відсутній або пошкоджений. Використовуйте Використовуйте менеджеру пакунків дистрибутива (або будь-який інший спосіб знайти і встановити пакет), щоб знайти пакет g ++ і встановити його. Не забудьте, що в деяких дистрибутивах цей пакет називається не g ++. Fedora, наприклад, використовує назву gcc-c ++ в соем репозитарії yum. Якщо ви не можете знайти g ++, спробуйте пошукати c ++, cpp або gcc.

(Configure :) (error :) C ++ preprocessor "CC (-E)" fails sanity check

Ця помилка викликана дивним "багом" в деяких версіях бібліотеки libtool, яка змушує конфігураційний скрипт перевіряти всі компілятори підтримуються libtool. Найбільш просте рішення - встановити g ++.

Помилки при виконанні команди make

Так як помилки при виконанні команди make зазвичай дуже специфічні, я дам список основних речей, які можуть допомогти:

Якщо ви компілюєте програму з використанням gcc 4 (використовуйте gcc -dumpversion щоб це з'ясувати), спробуйте використовувати більш старі версії компілятора. Спочатку переконайтеся, що у вас встановлена ​​більш стара версія. Зазвичай це можна дізнатися, використавши наступну команду:

Якщо вона поверне щось на зразок цього:

Те можете використовувати команди gcc32, щоб скомпілювати програму в більш ранніми версіями gcc. Якщо команда не поверне подібного рядка, то використання менеджеру пакунків дистрибутива, знайдіть і встановіть більш ранні версії gcc (зазвичай вони називаються compat-gcc або gcc-). Після установки, вам має бути доступна альтернативна версія gcc. Її можна знайти використовуючи команду ls. Змусити команди ./configure, make і make install використовувати старішу версію gcc можна так:

] $ CC = "/ usr / bin / gcc32" ./configure
[Rechosen @ localhost

] $ CC = "/ usr / bin / gcc32" make
[Rechosen @ localhost

] $ CC = "/ usr / bin / gcc32" make install

Звичайно шлях / usr / bin / gcc32 треба замінити на той, за яким у вас знаходиться альтернативна версія gcc.

Іноді помилки можуть викликані простим "багом" програми. Спробуйте завантажити останню версію програми (використовуючи її cvs, svn або інший репозитарій, або скачавши останній знімок) і скомпілюйте її, можливо ця помилка вже виправлена.

Помилка при виконанні комадно make може бути також викликана неправильною версією необхідної бібліотеки або програми. Ця проблема часто зустрічається для дуже нових або дуже старих пакетів. Перевірте залежності пакета (вони обчно написані на сайті програми) і порівняйте номера версій з версіями, встановленими у вас на комп'ютері (їх обчно можна подивитися, використання менеджеру пакунків дистрибутива). Якщо номер версії у вашій системі більше того, які написаний на сайті, можливо ви намагаєтеся скомпілювати дуже старий пакет. Якщо вам дейсвительно необхідно його скомпілювати, спробуйте встановити більш старі версії залежних пакетов.Как б то не було, звичайно краще пошукати інший спосіб установки цього пакета або пошукати альтернативу. Якщо номер версії в системі менше, ніж на сайті, ви можете спробувати оновити відповідний пакет.Ви можетепопробовать оновити необхідну бібліотеку або скомпілювати старішу весію программи.Так ж перевірте, може вже є цей пакет, скомпільований для авшего дистрибутива. Його установка, зазвичай, простіше, ніж виправлення помилок компіляції.

Інша річ, яку варто спробувати - це пошук специфічної помилки в інтернеті. Якщо ви не знайшли нічого корисного, спробуйте прибрати такі речі, як номер рядка (він може змінитися з новою версією), номер версії (його можна замінити зірочкою, якщо він міститься в назві програми) і спеціальні символи, такі як лапки, так як вони впливають на пошуковий сервіс. Зазвичай можна знайти багато інформації в листі розсилок. Іноді виходить патч, який виправляє помилки у вихідному коді. Його можна застосувати слудеющім чином:

] $ Patch -Np1

Не забудьте: щоб застосувати патч, поточної повинна бути директорія з вихідними текстами.

Помилки при виконанні команди make install

Ці помилки зазвичай легко зрозуміти, але я все одно про них напишу. Є два найбільш частих випадки, чому команда make install повертає помилку:

У вас немає прав користувача root. Спробуйте виконати команду make install, використовуючи команду sudo, або станеть користувачем root, використовуючи команду su. Команда sudo застосовується наступним чином:

] $ Sudo make install

Вона запитає пароль; зазвичай використовується власний пароль або пароль користувача root. Ви можете испльзовать команду su, щоб стати польpователем root:

Ця команда теж запитає пароль, але в даному випадку наобходім саме пароль користувача root. Після того, як ви стали користувачем root, просто виконайте команду make install.

Пакет, який ви тільки що скомпілювали не має команди установки. В цьому випадку вам треба скопіювати скомпільований бінарний файл в директорію bin вручну. Якщо ви виконаєте команду ls в директорії вихідного коду, виконуваний файл повинен бути світло зеленого кольору. Його треба скопіювати в / usr / bin (або, якщо хочете, в / usr / local / bin) за допомогою такої команди:

] $ Cp / Usr / bin

Я згоден, що це не завжди найпростіший спосіб, але іноді розробники не витрачають час на створення команди установки. Ми не повинні на них сердитися за це: адже перш за все вони роблять для нас корисну програму.

Ось список деяких інших можливих проблем і їх вирішення:

Все проходить добре, але коли я набираю ім'я програми, яку тільки що встановив, bash говорити, що не може її знайти. Це зазвичай відбувається через те, що make install встановлює все в / usr / local або in / opt /. Подивіться на висновок команди make install: куди скопійовані файли? Спробуйте добвавіть цю директорію в змінну PATH (наступний приклад наведено для пакета, встановленого в / usr / local):

Вам треба замінити / usr / local / bin на директорію, в якій встановлені виконувані файли вашого пакета. Якщо це допомогло, додайте цей рядок в / etc / profile, щоб вам не довелося набирати її кожен раз. До речі, ви можете контролювати місце, куди встановиться пакет, вказавши наступну опцію, коли запускаєте конфігураційний скрипт:

Змініть / usr на директорію, в яку хочете встановити пакет. Не забудьте, що ви встановлюєте тільки префікс; бінарні файли встановляться в свою піддиректорію, бібліотеки в свою, заголовки в свою і т.д. Наприклад при використанні зазначеного префікса, бінарні файли будуть встановлені в / usr / bin.

Я хочу встановити дуже стару версію пакета, але я не можу знайти вихідний код в інтернеті. У вас ще залишається маленький шанс. Спробуйте знайти rpm файл пакета тієї версії, яку ви хочете і скачайте відповідний src rpm файл. Розпакувати його можна таким чином:

] $ Rpm2cpio | cpio -idv

Тепер можна використовувати вихідний код, витягнутий з rpm файлу.