อาจไม่ได้กำหนดมาโคร: AC_MSG_ERROR


113

ฉันมีสิ่งต่อไปนี้ใน config.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

ใครสามารถอธิบายได้ว่าอะไรเป็นสาเหตุของข้อผิดพลาดนี้และจะติดตามปัญหาได้อย่างไร

แก้ไข: การเพิ่มรายละเอียดเกี่ยวกับความแตกต่าง

กล่องที่ใช้งานได้:

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

แก้ไขใหม่:มีเพียงเครื่อง 32 บิตเท่านั้นที่ประสบปัญหานี้

UPDATEDฉันสามารถที่จะทำให้เกิดปัญหาในเครื่อง CentOS กับautoconf 2.67, automake 1.11.1, และlibtool 2.2.6b m4 1.4.14นี่เป็นเพียงบั๊กของเครื่อง 32 บิตหรือไม่?


เหตุใดจึงเป็นปัญหา สร้าง tarball ของคุณด้วย autoconf 2.67 คุณต้องติดตั้ง autoconf ไว้ในเครื่องเดียวเท่านั้น!
William Pursell

1
ฉันรู้ว่าฉันสามารถแก้ไขปัญหาได้อย่างง่ายดายฉันแค่พยายามตรวจสอบให้แน่ใจว่ามีปัญหากับกล่องเดียวไม่ใช่ปัญหาในไฟล์ config.ac หรือไฟล์ config อื่น ๆ ของเรา
dbeer

ฉันรู้ว่า autoconf 2.64 ถือว่าค่อนข้างบั๊ก เป็นไปได้ว่าคุณกำลังประสบกับข้อผิดพลาดใน 2.65
William Pursell

1
ฉันสามารถสร้างปัญหาซ้ำในเครื่อง 32 บิตเครื่องอื่นด้วย autoconf 2.67, automake 1.11.1, libtool 2.2.6b และ m4 1.4.14
dbeer

1
ฉันนึกไม่ถึงว่าสิ่งนี้จะช่วยได้: แต่คุณเคยลอง AC_CHECK_PROGS ([MAKE], [$ MAKE make gmake], [error]) หรือยัง ดูเหมือนว่าจะเป็นปัญหาของ m4 และการอ้างถึง m4 อย่างเต็มที่สามารถช่วยได้เท่านั้น บรรทัดนี้อาจไม่ใช่ผู้ร้าย แต่มีกลิ่นเหมือนปัญหาการอ้างถึงที่ไหนสักแห่ง คุณสามารถโพสต์ config.ac แบบเต็มได้หรือไม่?
William Pursell

คำตอบ:


257

ฉันมีปัญหาเดียวกันนี้และพบว่า pkg-configแพ็คเกจนั้นหายไป

หลังจากติดตั้งแพคเกจทุกอย่างถูกสร้างขึ้นอย่างถูกต้อง


2
ขอบคุณ! สรุปกรณีของฉันสำหรับผู้ชายคนต่อไปในรองเท้าเดียวกัน เพื่อประโยชน์ในการสร้างที่ทำซ้ำได้ฉันต้องใช้ toolchain ของเส้นทางที่กำหนดเองไปยังเครื่องมือ GNU Build System ทั้งหมด เทียบเท่ากับการติดตั้ง pkg-config ไม่เพียง แต่จะแก้ไข PATH เท่านั้น แต่ยังเพิ่ม"-I /toolchain_local/pkg-config-0.23/share/aclocal"ไปยังautoreconfcommandline ด้วย ฉันใช้เวลาพอสมควรในการตระหนักว่า pkg-config ไม่ได้ติดตั้งเฉพาะไบนารีเท่านั้น rpm -ql pkgconfigช่วย
Assambar

7
libtoolผมได้มีการติดตั้ง
Mitar

11
ในทางเทคนิคแล้ว FYI ไม่สามารถแก้ไขปัญหาได้ ในกรณีนี้มีการAC_MSG_ERRORพยายามพูดว่า "คุณต้องติดตั้ง pkg-config" แต่ด้วยเหตุผลบางประการจึงไม่สามารถพิมพ์ข้อความนี้ได้ (ให้ข้อผิดพลาดเกี่ยวกับAC_MSG_ERROR) ด้วยการติดตั้งpkg-configไม่จำเป็นต้องพิมพ์ข้อความแสดงข้อผิดพลาดอีกต่อไปดังนั้นจึงAC_MSG_ERRORข้ามบรรทัดและสิ่งต่างๆก็ใช้ได้ ได้ดีถ้าคุณกำลังติดตั้งแพ็คเกจของคนอื่น แต่ถ้าเป็นรหัสของคุณเองคุณยังไม่ได้แก้ไขปัญหา :-)
Malvineous

19
ฉันเคยพบปัญหานี้มาก่อนและการติดตั้งautoconf-archiveแพคเกจช่วยแก้ปัญหาได้
jonthalpy

5
ว้าวนี่คือตัวอย่างของการกำหนดค่าอัตโนมัติที่พ่นข้อความแสดงข้อผิดพลาดที่ไม่ดีออกมา
John Greene

31

ขอแนะนำให้ใช้autoreconf -fiแทนการโทรด้วยตนเองaclocal;autoconf;automake; #and whatever elseเพื่อเติมข้อมูล aclocal.m4 และอื่น ๆ อย่างเหมาะสม

การเพิ่มACLOCAL_AMFLAGS = -I m4(ไปยัง Makefile.am ระดับ toplevel) และAC_CONFIG_MACRO_DIR([m4])ในขณะนี้ยังคงเป็นทางเลือกหากคุณไม่ได้ใช้ไฟล์ m4 ของตัวเอง แต่แน่นอนว่าการทำเช่นนี้จะทำให้กระบวนการทำงานเงียบลง :)


เรามีไฟล์ m4 ซึ่งจำเป็นสำหรับเรา นอกจากนี้การเปลี่ยนสิ่งต่างๆเป็น autoreconf -fi ทำให้เกิดข้อผิดพลาดเดียวกัน
dbeer

1
หากคุณมีไฟล์ m4 ACLOCAL_AMFLAGS และ AC_CONFIG_MACRO_DIR คือสิ่งที่คุณควรทำ (และวางไฟล์เป็น m4 / resp. dir ที่คุณระบุ)
jørgensen

ขอบคุณ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

(ฉันติดตั้ง libcurl allready) ทำงานให้ฉันอย่างน้อย ..


11

ฉันประสบปัญหาเดียวกันนี้ภายใต้ CentOS 7

ในกรณีนี้อาจเกิดปัญหาขึ้นหลังจากติดตั้งlibcurl-devel( libcurlติดตั้งในเครื่องนี้แล้ว)


6

ฉันมีปัญหาเดียวกันกับ RHEL7.5 กับ otto-de / libvmod-uuid

ได้รับการแก้ไขโดยการติดตั้งแพ็กเกจ "autoconf-archive"


ฉันต้องการแพ็คเกจ Debian "autoconf-archive" เพื่อสร้าง powertop v2,31-rc1
dileks

3

คุณกำลังตั้งค่าm4ไดเร็กทอรี '' ในเครื่องหรือไม่? เช่น,

> aclocal -I m4 --install

บางแพ็คเกจมาพร้อมกับautogen.shหรือinitgen.shเชลล์สคริปต์เพื่อเรียกใช้ glibtoolize, autoheader, autoconf, automake นี่คือ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

แก้ไข

คุณอาจจะต้องเพิ่มการระดับบนสุดACLOCAL_AMFLAGS = -I m4Makefile.am


autoreconf ไม่ได้เลือก libtoolize ที่เหมาะสมกับ Darwin หรือไม่?
William Pursell

ฉันกำลังตั้งค่าไดเร็กทอรี 'm4' ในเครื่อง ฉันเพิ่ม -I m4 - ติดตั้งใน aclocal แต่ฉันได้รับข้อผิดพลาดเดียวกัน นี่คือสคริปต์ autogen.sh ของฉัน: libtoolize -c -f autoheader -f aclocal -I m4 - ติดตั้ง autoconf -f automake --foreign --add-missing --force-missing --copy
dbeer

1
@dbeer เพิ่มACLOCAL_AMFLAGSตัวแปรหรือไม่
Brett Hale

@WilliamPursell ไม่มันไม่ได้ MacOS มี GNU libtool เป็น 'glibtool' และที่ Apple จัดหาให้ (ซึ่งไม่ทำงานอย่างที่ GNU libtool คาดไว้) เป็น 'libtool' โปรดทราบว่า libtoolize ถูกติดตั้งเป็น 'glibtoolize' ด้วย สิ่งนี้สามารถลบล้างได้โดยระบุมาโคร LIBTOOLIZE และ LIBTOOL แม้ว่าตัวอย่างอัตโนมัตินี้จะดี แต่ก็มักจะดีกว่าที่จะเรียกใช้ autoreconf -fi และปล่อยให้มันเดา / กู้คืนแฟล็ก -I จากการรันครั้งก่อนโดยเฉพาะเมื่อซอฟต์แวร์ไม่ใช่ของคุณ
LeoTh3o


2

ข้อผิดพลาดถูกสร้างขึ้นโดย autom4te หากตั้งค่าสิ่งต่างๆอย่างถูกต้องส่วนของโค้ดที่สร้างข้อผิดพลาดนั้นไม่ควรเห็น "AC_MSG_ERROR" เนื่องจากควรขยาย m4 ก่อนถึงจุดนั้น คุณบอกว่าข้อผิดพลาดเกิดขึ้นเฉพาะ "ในการตั้งค่าบางอย่าง" ฉันขอแนะนำว่าในการตั้งค่าเหล่านั้นการติดตั้ง autoconf ของคุณคือ fubar เป็นไปได้ว่าคุณติดตั้ง m4 เวอร์ชันที่เข้ากันไม่ได้


ฉันใช้ autoconf 2.65 และ m4 1.4.13 เหล่านี้เข้ากันได้หรือไม่?
dbeer

m4 1.4.13 ใหม่เพียงพอและไม่น่าจะเป็นปัญหา คุณสามารถระบุได้หรือไม่ว่าการตั้งค่าที่คุณเห็นคำเตือนแตกต่างจากที่คุณไม่เห็นมีอะไรบ้าง
William Pursell

ฉันเพิ่งเพิ่มข้อมูลบางส่วนในคำถามของฉัน - คุณคิดว่ามีอะไรที่เกี่ยวข้องอีกไหม ฉันไม่ค่อยมีความรู้เกี่ยวกับเครื่องมืออัตโนมัติ
dbeer

เพิ่งสังเกตเห็น - เครื่อง 32 บิตดูเหมือนจะเป็นเครื่องที่มีปัญหา
dbeer


2

บน Mac OS X el กัปตันที่มีเบียร์ลอง:
ชงติดตั้ง pkgconfig

สิ่งนี้ได้ผลสำหรับฉัน


2

มีสาเหตุที่เป็นไปได้สองประการสำหรับปัญหานั้น:

  1. ไม่ได้ติดตั้ง aclocal
    โซลูชัน: ติดตั้ง libtool

    • สำหรับ ubuntu: sudo apt-get install libtool
    • สำหรับ centos: sudo yum install libtool
  2. เส้นทางไปยัง LIBTOOL.m4 มีข้อผิดพลาด
    สารละลาย:

    1. ใช้aclocal --print-ac-dirตรวจสอบเส้นทางปัจจุบันไปยัง aclocal (โดยปกติควรเป็น "/ 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



0

สิ่งนี้เกิดขึ้นกับฉันเมื่อฉันลืม a ในอาร์กิวเมนต์สำหรับมาโครที่กำหนดในเครื่อง ใช้เวลาหลายชั่วโมงในการพยายามคิดออก (แทบจะไม่คุ้นเคยกับเครื่องมืออัตโนมัติเลย) ...

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 เป็นปลาชนิดหนึ่งสีแดง สาเหตุของแมโครที่ไม่ได้กำหนดอาจเป็น:
    • การพิมพ์ชื่อมาโครในไฟล์ผิดหรือมาโครโลคัลที่ไม่ได้จัดส่งมาพร้อมกับ tarball
    • ไม่มีแพ็คเกจซึ่งอาจมาพร้อมกับชุดมาโคร autoconf ซึ่งหนึ่งในนั้นใช้ในไฟล์ pkg-config มักเป็นส่วนที่ขาดหายไป (เนื่องจากเช่น PKG_CHECK_MODULES) แต่อาจเป็นแพ็คเกจอื่นที่จัดหามาโครที่จำเป็น แต่ไม่มี สิ่งที่เลวร้ายแน่นอนคือสิ่งนี้เกิดขึ้นก่อนที่สคริปต์กำหนดค่าที่ยังไม่มีอยู่จะสามารถตรวจสอบแพ็คเกจที่หายไป ...

0

ฉันมีปัญหาคล้ายกันเมื่อพยายามสร้าง amtk และ utthpmock ด้วย jhbuild

ฉันต้องการติดตั้ง autoconf-archive เวอร์ชันล่าสุด คำแนะนำที่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

หลังจากsource ~/.bashrcนั้นในที่สุดก็พบมาโครทั้งหมดและการสร้างก็สำเร็จ


-1

ฉันมีปัญหาเดียวกันกับพอร์ต Macports "openocd" (ปรับเปลี่ยน Portfile ในเครื่องเพื่อใช้ที่เก็บ git) บนเครื่องที่ติดตั้งใหม่

การแก้ไขถาวรเป็นเรื่องง่ายกำหนดการอ้างอิงกับ pkgconfig ในพอร์ต Portfile: depend_lib-append: pkgconfig

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.