можливо не визначений макрос: AC_MSG_ERROR


113

У configure.ac у мене є таке:

AC_CHECK_PROGS(MAKE,$MAKE make gmake,error)
if test "x$MAKE" = "xerror" ;then
  AC_MSG_ERROR([cannot find a make command])
fi

Це є в нашому проекті вже давно, але в деяких програмах я отримую цю помилку:

configure.ac:45: error: possibly undefined macro: AC_MSG_ERROR
  If this token and others are legitimate, please use m4_pattern_allow.
  See the Autoconf documentation.

Нещодавно додані рядки над цим:

AC_CONFIG_MACRO_DIR([m4])
LT_INIT

Хтось може пояснити, що викликає цю помилку, і як відстежити проблему?

EDIT: Додавання деталей про відмінності.

Коробка, яка працює:

uname -a Linux host1 2.6.38-13-generic #53-Ubuntu SMP Mon Nov 28 19:33:45 UTC 2011 x86_64 x86_64 x86_64 GNU/Linux

automake: 1.11.1
autoconf: 2.67
m4: 1.4.14
libtoolize: 2.2.6b

Поле, яке не працює:

Linux host2 2.6.32-35-generic-pae #78-Ubuntu SMP Tue Oct 11 17:01:12 UTC 2011 i686 GNU/Linux

automake: 1.11.1
autoconf: 2.65
m4: 1.4.13
libtoolize: 2.2.6b

NEW EDIT: лише 32-бітні машини відчувають цю складність.

ОНОВЛЕНО Я можу відтворити проблему на машині CentOS з autoconf 2.67, automake 1.11.1, libtool 2.2.6bі m4 1.4.14. Це просто помилка з 32-бітовими машинами?


Чому це проблема? Створіть ваші тарболики за допомогою функції autoconf 2.67. Потрібно встановити автоконфігурацію лише на одній машині!
Вільям Перселл

1
Я знаю, що легко вирішувати проблему, я просто намагаюся переконатися, що це проблема з одним вікном, а не проблема в нашому configure.ac або інших конфігураційних файлах.
dbeer

Я знаю, що autoconf 2.64 вважався досить баггі. Можливо, ви відчуваєте помилку в 2,65.
Вільям Перселл

1
Я можу відтворити проблему на іншій 32-бітній машині з autoconf 2.67, автоматикою 1.11.1, libtool 2.2.6b та m4 1.4.14
dbeer

1
Я не можу уявити собі цю допомогу: але ви спробували AC_CHECK_PROGS ([MAKE], [$ MAKE make gmake], [error])? Це безумовно звучить як проблема m4, і повністю цитування речей до m4 може лише допомогти. Цей конкретний рядок, мабуть, не є винуватцем, але він десь пахне проблемою котирування. Чи можете ви опублікувати повний configure.ac?
Вільям Перселл

Відповіді:


256

У мене був цей самий випуск і виявлено, що pkg-configпакет відсутній.

Після установки пакета все генерується правильно.


2
Дякую! Виклавши мій випадок, для наступного хлопця в такому ж взутті. Для відтворення збірок я повинен використовувати ланцюжок інструментів спеціальних шляхів до всіх інструментів системи GNU Build System. Еквівалент установки pkg-config був не тільки для зміни PATH, але й для додавання "-I /toolchain_local/pkg-config-0.23/share/aclocal"до autoreconfкомандного рядка. Знадобилося певний час, щоб зрозуміти, що pkg-config не встановлює лише бінарні файли. rpm -ql pkgconfigдопомогли.
Ассамбар

7
Довелося встановити libtool.
Мітар

11
Тільки FYI технічно це не вирішує проблему. У цьому випадку AC_MSG_ERRORвін намагався сказати "вам потрібно встановити pkg-config", але чомусь не вдалося роздрукувати це повідомлення (даючи помилку про AC_MSG_ERROR). Встановивши pkg-configбільше не потрібно було друкувати повідомлення про помилку, тому AC_MSG_ERRORрядок було пропущено і все працює. Добре, якщо ви встановлюєте чужий пакет, але якщо це ваш власний код, ви досі не вирішили проблему :-)
Malvineous

19
Я вже стикався з цією проблемою, і після встановлення autoconf-archiveпакета виправлено цю проблему.
jonthalpy

5
Нічого собі, це приклад autoreconfig, що виплюнув дійсно погане повідомлення про помилку.
Джон Грін

31

Для правильного заповнення aclocal.m4 рекомендується використовувати autoreconf -fiзамість того, aclocal;autoconf;automake; #and whatever elseщоб дзвонити вручну .

Додавання ACLOCAL_AMFLAGS = -I m4(toplevel Makefile.am) і AC_CONFIG_MACRO_DIR([m4])наразі все ще необов’язково, якщо ви не використовуєте жодних власних файлів m4, але, звичайно, це заглушить процес :)


У нас є файли m4, так що нам це потрібно. Крім того, зміна речей на autoreconf -fi створює ту ж помилку.
dbeer

1
Якщо у вас є файли m4, ACLOCAL_AMFLAGS та AC_CONFIG_MACRO_DIR - це саме те, що ви повинні зробити. (І поміщаючи файли в m4 /, відповідно до вказаного вами
режиму

Спасибі, autoreconf -fiзробив компіляцію PCRE.
uınbɐɥs

У мене була точно така ж проблема і виявив , що я пропустив настройки ACLOCAL_AMFLAGSв Makefile.am- спасибі!
simpleigh

2
Автоінструменти настільки зламані ... Жодне з цього лайна не має сенсу. Як це може бути через 30 років, все одно це порушено?
jww

27

У мене була ця проблема зі своєю власною configure.ac, але в цьому випадку (і на користь комусь із Google) це було тому, що я випадково процитував AC_MSG_ERRORтак, що це трактується як рядок:

AX_BOOST_BASE([1.42], [], [AC_MSG_ERROR([Could not find Boost])])

Щойно я видалив квадратні дужки навколо AC_MSG_ERRORмакросу, він спрацював:

AX_BOOST_BASE([1.42], [], AC_MSG_ERROR([Could not find Boost]))

У тих коментарях, які говорять про те, що ви повинні встановити pkg-configабо якийсь пакет, не вистачає точки. Це AC_MSG_ERRORмає працювати і дасть вам корисне повідомлення типу "Вам потрібно встановити пакет XYZ", але через певну проблему AC_MSG_ERRORце не працює. Встановлення пакета XYZ, безумовно, призведе до усунення помилки, але тільки тому, що коли пакет вже є, більше не потрібно друкувати повідомлення про помилку!

Отже, встановлення pkg-configчи певний пакет просто обходить проблему, вона фактично її не вирішує.


12

У мене також були подібні проблеми .. моє рішення полягає в

apt-get install libcurl4-openssl-dev

(у мене був лібкурл вже встановлений) працював для мене щонайменше ..


11

Я відчував цю ж проблему під CentOS 7

У цьому випадку проблема вимкнулася після встановлення libcurl-devel( libcurlвже встановлено на цій машині)


6

У мене була така ж проблема на RHEL7.5 з otto-de / libvmod-uuid

Це було виправлено встановленням пакетів "autoconf-archive"


Мені знадобився пакет "autoconf-archive" Debian для створення powertop v2,31-rc1.
дилекс

3

Ви налаштовуєте локальний m4каталог ' '? наприклад,

> aclocal -I m4 --install

Деякі пакети постачаються із скриптом autogen.shабо initgen.shоболонкою для запуску glibtoolize, autoheader, autoconf, automkeke. Ось autogen.shсценарій, який я використовую:

#! /bin/sh

case `uname` in Darwin*) glibtoolize --copy ;;
  *) libtoolize --copy ;; esac

autoheader
aclocal -I m4 --install
autoconf

automake --foreign --add-missing --force-missing --copy

EDIT

Можливо, вам потрібно буде додати ACLOCAL_AMFLAGS = -I m4до найвищого рівня Makefile.am.


Чи автореконф не вибирає належну лібтоолізію Дарвіна?
Вільям Перселл

Я встановлюю локальний каталог 'm4'. Я додав -I m4 --встановити в aclocal, але я отримую ту ж помилку. Це мій скрипт autogen.sh: libtoolize -c -f autoheader -f aclocal -I m4 --встановити autoconf -f automake
--foreign

1
@dbeer, додав ACLOCAL_AMFLAGSзмінну?
Бретт Хейл

@WilliamPursell ні, це не так. MacOS характеризує GNU libtool як "glibtool", а той, який надає Apple (який не веде себе так, як очікував GNU libtool), як "libtool". Зауважте, що також libtoolize встановлюється як "glibtoolize". Це можна змінити, вказавши макрос LIBTOOLIZE та LIBTOOL. Незважаючи на те, що зразок автогена хороший, часто краще просто запустити autoreconf -fi і дозволити йому відгадати / відновити прапор -I з попереднього запуску, особливо коли програмне забезпечення не ваше.
LeoTh3o

3

Для Debian. Необхідні пакети: m4 automake pkg-config libtool


2

Помилка генерується autom4te. Якщо все налаштовано правильно, частина коду, яка генерує цю помилку, ніколи не повинна бачити "AC_MSG_ERROR", оскільки вона повинна була бути розширена на m4 до цього моменту. Ви кажете, що помилка трапляється лише "в деяких налаштуваннях". Я б порадив, що в цих налаштуваннях ваша установка autoconf є фубаром. Можливо, у вас встановлена ​​несумісна версія m4.


Я на autoconf 2.65 та m4 1.4.13. Ці сумісні?
dbeer

m4 1.4.13 є досить новим і, швидше за все, це не проблема. Чи можете ви визначити, чим відрізняються установки, в яких ви бачите попередження від тих, у яких цього немає?
Вільям Перселл

Я лише додав інформацію про це до свого запитання - чи можете ви придумати щось інше? Я не дуже обізнаний, коли справа стосується автоінструментів.
dbeer

Щойно зауважив - 32-бітові машини здаються тими, що мають труднощі.
dbeer

2

Використання MacOS X

sudo port install pkgconfig

було рішенням!


3
ця відповідь застаріла, використовуйте brew замість порту
xiamx

2

На Mac OS X el
cap with brew спробуйте: варити встановити pkgconfig

Це працювало для мене.


2

Існують дві можливі причини цієї проблеми:

  1. не встановив звуковий запис.
    рішення: встановити libtool

    • Для ubuntu: sudo apt-get install libtool
    • Для центів: sudo yum install libtool
  2. шлях до LIBTOOL.m4 - помилка.
    рішення:

    1. використовувати aclocal --print-ac-dirдля перевірки поточного шляху до аклокалу. (Зазвичай це має бути "/ usr / share / aclocal" або "/ usr / share / aclocal")
    2. Потім перевірте, чи є * .m4 файли.
    3. Якщо ні, cp відповідні * .m4 файли цьому шляху. (Можливо, cp /usr/share/aclocal/*.m4 /usr/local/share/aclocal/або cp /usr/local/share/aclocal/*.m4 /usr/share/aclocal/)

Сподіваюся, це допомагає


1

У мене була така ж проблема з Ubuntu ( error: possibly undefined macro: AC_MSG_ERROR), але відповіді вище для мене не працювали. Я знайшов рішення тут

Це зробило трюк:

$ LANG=C LC_CTYPE=C ./autogen.sh

1

Моя проблема вирішується після встановлення pkg-config на Mac (варити встановити pkg-config)


1

Я вирішив це шляхом yum install libtool


після того, як я закінчу компілювати pkg-config
VictorV

0

Це сталося зі мною, коли я забув, в аргументах для локально визначеного макросу. Провели години, намагаючись розібратися (ледь знайомі з автоінструментами) ...

AC_CHECK_MACRO([Foo]
    AC_LOCAL_DO([......

повинно було

AC_CHECK_MACRO([Foo],      # <-- Notice comma, doh!
    AC_LOCAL_DO([......

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


0

Я просто втратив кілька годин на цьому. Мій висновок:

  • Залежно від версії та будь-яких інших місцевих умов, autoconf виплюне повідомлення про невизначений AC_MSG_ERROR, коли він зустріне БУДЬ-який невизначений макрос . AC_MSG_ERROR - червона оселедець. Причинами невизначеного макросу можуть бути:
    • Введення тексту в імені макросу у файлі або локальному макросі, який не постачався разом із тарболом
    • Відсутній пакет, який поставився б із набором макросів autoconf, один з яких використовується у файлі. pkg-config часто відсутній (через, наприклад, PKG_CHECK_MODULES), але це може бути будь-який інший пакет, який надає потрібний, але відсутні макрос. Загальна річ, це те, що це відбувається до того, як ще не існує сценарій конфігурації міг перевірити відсутність пакету ...

0

У мене були подібні проблеми, коли я намагався створити amtk та utthpmock з jhbuild.

Мені потрібно було встановити останню версію autoconf-архіву. Інструкції розміщені на веб-сторінці https://github.com/autoconf-archive/autoconf-archive/blob/master/README-maint . Я зробив додатковий sudo make installнаприкінці.

Останнім кроком було оновлення мого ACLOCAL_PATH:

echo 'export ACLOCAL_PATH=$ACLOCAL_PATH:/usr/local/share/aclocal' >> ~/.bashrc

Після a source ~/.bashrc, всі макроси були нарешті знайдені, і нарощування вдалося.


-1

У мене була така ж проблема з портом Macports "openocd" (локально модифікований Portfile для використання сховища git) на щойно встановленій машині.

Постійне виправлення легко, визначте залежність від pkgconfig в Portfile: залежно_lib-додає порт: pkgconfig

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.