Yellow leaf - статті - рішення проблем, що виникають при виконанні команд
Іноді стандартна послідовність для компіляції програми не працює. Вона починає виводити різні помилки і не компілює програму. Що в такому випадку робити? У цій статті описано як позбутися від безлічі часто зустрічаються помилок.
Увага: В цій статті мається на увазі, що у вас вже є деяка кількість знань в області роботи з командним рядком і ви знаєте як працювати з менеджером пакунків дистрибутиву.
Помилки при виконанні команди ./configure
Помилки при виконанні команди make
Помилки при виконанні команди make install
Помилки при виконанні команди ./configure
Наступний список містить деякі загальні помилки, які може видати каманда ./configure. Помилки відсортовані за частотою виникнення. Спочатку найбільш часто зустрічаються. Речі між (і) є опціональними, вони можуть не з'являтися. OR, виділене жирним курсивом означає, що кілька помилок мають одне рішення. текст між <и> показує тип рядка, яка повинна з'явитися в цьому місці.
(Configure :) (error :)
Це зазвичай означає що -dev або -devel версія пакету, який називається
(Configure :) (error :) can not find header (file)
Конфігураційний скрипт не може знайти .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-
] $ 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
Я згоден, що це не завжди найпростіший спосіб, але іноді розробники не витрачають час на створення команди установки. Ми не повинні на них сердитися за це: адже перш за все вони роблять для нас корисну програму.
Ось список деяких інших можливих проблем і їх вирішення:
Все проходить добре, але коли я набираю ім'я програми, яку тільки що встановив, bash говорити, що не може її знайти. Це зазвичай відбувається через те, що make install встановлює все в / usr / local або in / opt /
Вам треба замінити / usr / local / bin на директорію, в якій встановлені виконувані файли вашого пакета. Якщо це допомогло, додайте цей рядок в / etc / profile, щоб вам не довелося набирати її кожен раз. До речі, ви можете контролювати місце, куди встановиться пакет, вказавши наступну опцію, коли запускаєте конфігураційний скрипт:
Змініть / usr на директорію, в яку хочете встановити пакет. Не забудьте, що ви встановлюєте тільки префікс; бінарні файли встановляться в свою піддиректорію, бібліотеки в свою, заголовки в свою і т.д. Наприклад при використанні зазначеного префікса, бінарні файли будуть встановлені в / usr / bin.
Я хочу встановити дуже стару версію пакета, але я не можу знайти вихідний код в інтернеті. У вас ще залишається маленький шанс. Спробуйте знайти rpm файл пакета тієї версії, яку ви хочете і скачайте відповідний src rpm файл. Розпакувати його можна таким чином:
] $ Rpm2cpio
Тепер можна використовувати вихідний код, витягнутий з rpm файлу.