có thể là macro không xác định: AC_MSG_ERROR


113

Tôi có những thứ sau trong 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

Điều này đã có trong dự án của chúng tôi trong một thời gian dài, nhưng trong một số thiết lập, tôi gặp lỗi này:

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.

Các dòng gần đây đã được thêm vào bên trên:

AC_CONFIG_MACRO_DIR([m4])
LT_INIT

Bất cứ ai có thể giải thích những gì gây ra lỗi này và làm thế nào để theo dõi sự cố?

CHỈNH SỬA: Thêm chi tiết về sự khác biệt.

Hộp hoạt động:

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

Hộp không hoạt động:

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

CHỈNH SỬA MỚI: chỉ máy 32 bit gặp khó khăn này.

Cập nhật tôi có thể tạo lại vấn đề trên một máy CentOS với autoconf 2.67, automake 1.11.1, libtool 2.2.6b, và m4 1.4.14. Đây chỉ là một lỗi của máy 32-bit?


Tại sao điều này là một vấn đề? Xây dựng tarball của bạn với autoconf 2.67. Bạn chỉ cần cài đặt autoconf trên một máy!
William Pursell,

1
Tôi biết rằng tôi có thể khắc phục sự cố một cách dễ dàng, tôi chỉ đang cố gắng đảm bảo rằng đó là sự cố với một hộp chứ không phải là sự cố trong config.ac hoặc các tệp cấu hình khác của chúng tôi.
dbeer

Tôi biết rằng autoconf 2.64 được coi là khá lỗi. Có thể bạn đang gặp lỗi trong 2.65.
William Pursell

1
Tôi có thể tạo lại vấn đề trên một máy 32-bit với autoconf 2,67, automake 1.11.1, libtool 2.2.6b, và m4 1.4.14
dbeer

1
Tôi không thể tưởng tượng điều này sẽ giúp ích được gì: nhưng bạn đã thử AC_CHECK_PROGS ([MAKE], [$ MAKE make gmake], [error]) chưa? Nó chắc chắn giống như một vấn đề m4 và chỉ trích dẫn đầy đủ mọi thứ cho m4 có thể giúp đỡ. Dòng cụ thể này có lẽ không phải là thủ phạm, nhưng nó có mùi giống như một vấn đề trích dẫn ở đâu đó. Bạn có thể đăng toàn bộ config.ac được không?
William Pursell,

Câu trả lời:


256

Tôi gặp sự cố tương tự và thấy rằng pkg-configgói bị thiếu.

Sau khi cài đặt gói, mọi thứ được tạo chính xác.


2
Cảm ơn! Phác thảo trường hợp của tôi, cho chàng trai tiếp theo trong cùng một đôi giày. Để có các bản dựng có thể tái tạo, tôi phải sử dụng một chuỗi công cụ gồm các đường dẫn tùy chỉnh đến tất cả các công cụ Hệ thống xây dựng GNU. Tương đương với việc cài đặt pkg-config không chỉ để sửa đổi PATH mà còn để thêm "-I /toolchain_local/pkg-config-0.23/share/aclocal"vào autoreconfdòng lệnh. Tôi đã mất một thời gian để nhận ra rằng pkg-config không chỉ cài đặt các tệp nhị phân. rpm -ql pkgconfigđã giúp.
Assambar

7
Tôi đã phải cài đặt libtool.
Mitar

11
Chỉ FYI về mặt kỹ thuật, điều này không khắc phục được sự cố. Trong trường hợp này, AC_MSG_ERRORnó đang cố gắng nói "bạn cần cài đặt pkg-config" nhưng vì lý do nào đó mà nó không thể in thông báo này (báo lỗi về AC_MSG_ERROR). Bằng cách cài đặt pkg-config, không còn cần phải in thông báo lỗi nữa, vì vậy AC_MSG_ERRORdòng đã được bỏ qua và mọi thứ hoạt động. Tốt nếu bạn đang cài đặt của người khác gói, nhưng nếu đó là mã của riêng bạn, bạn vẫn chưa khắc phục vấn đề :-)
Malvineous

19
Tôi đã gặp sự cố này trước đây và cài đặt autoconf-archivegói đã khắc phục sự cố.
jonthalpy

5
Ồ, đây là một ví dụ về autoreconfig đưa ra một thông báo lỗi thực sự tồi tệ.
John Greene

31

Bạn nên sử dụng autoreconf -fithay vì gọi thủ công aclocal;autoconf;automake; #and whatever elseđể điền đúng aclocal.m4, v.v.

Thêm ACLOCAL_AMFLAGS = -I m4(vào Toplevel Makefile.am) và AC_CONFIG_MACRO_DIR([m4])hiện vẫn là tùy chọn nếu bạn không sử dụng bất kỳ tệp m4 nào của riêng mình, nhưng tất nhiên, làm điều đó sẽ tắt quá trình xử lý :)


Chúng tôi có các tệp m4, vì vậy đó là bắt buộc đối với chúng tôi. Ngoài ra, việc thay đổi mọi thứ thành autoreconf -fi cũng tạo ra lỗi tương tự.
dbeer

1
Nếu bạn có tệp m4, ACLOCAL_AMFLAGS và AC_CONFIG_MACRO_DIR chính xác là những gì bạn nên làm. (Và đặt các tập tin trong m4 /, resp các dir mà bạn chỉ định.)
Jorgensen

Cảm ơn, autoreconf -fiđã biên dịch PCRE.
uınbɐɥs

Tôi đã cùng một vấn đề chính xác này và thấy rằng tôi đã bỏ lỡ thiết lập ACLOCAL_AMFLAGStrong Makefile.am- cảm ơn!
simpleigh

2
Autotools bị hỏng ... Không có gì trong số này có ý nghĩa. Làm sao có thể trong 30 năm mà mọi thứ vẫn hỏng như thế này?
jww

27

Tôi đã gặp sự cố này với riêng mình configure.ac, nhưng trong trường hợp này (và vì lợi ích của bất kỳ ai ở đây từ Google), đó là do tôi đã vô tình trích dẫn AC_MSG_ERRORnên nó được coi là một chuỗi:

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

Khi tôi loại bỏ các dấu ngoặc vuông xung quanh AC_MSG_ERRORmacro, nó đã hoạt động:

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

Những nhận xét nói rằng bạn nên cài đặt pkg-confighoặc một số gói bị thiếu điểm. Nó AC_MSG_ERRORđược cho là hoạt động và cung cấp cho bạn một thông báo hữu ích như "Bạn cần cài đặt gói XYZ", nhưng vì một số vấn đề, AC_MSG_ERRORnó không hoạt động. Cài đặt gói XYZ chắc chắn sẽ làm cho lỗi biến mất, nhưng chỉ vì một khi gói ở đó, bạn không cần phải in thông báo lỗi nữa!

Vì vậy, cài đặt pkg-confighoặc một gói cụ thể chỉ bỏ qua vấn đề, nó không thực sự khắc phục được nó.


12

tôi cũng gặp vấn đề tương tự .. giải pháp của tôi là

apt-get install libcurl4-openssl-dev

(tôi đã cài đặt xong libcurl) ít nhất cũng có tác dụng với tôi ..


11

Tôi đã gặp sự cố tương tự này trong CentOS 7

Trong trường hợp có thể, sự cố đã xảy ra sau khi cài đặt libcurl-devel( libcurlđã được cài đặt trên máy này)


6

Tôi gặp sự cố tương tự trên RHEL7.5 với otto-de / libvmod-uuid

Nó đã được khắc phục bằng cách cài đặt gói "autoconf-archive"


Tôi cần gói Debian "autoconf-archive" để tạo powertop v2,31-rc1.
dileks

3

Bạn có đang thiết lập một m4thư mục ' ' cục bộ không? ví dụ,

> aclocal -I m4 --install

Một số gói đi kèm với script autogen.shhoặc initgen.shshell để chạy glibtoolize, autoheader, autoconf, automake. Đây là một autogen.shtập lệnh tôi sử dụng:

#! /bin/sh

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

autoheader
aclocal -I m4 --install
autoconf

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

BIÊN TẬP

Bạn có thể cần thêm ACLOCAL_AMFLAGS = -I m4vào cấp cao nhất Makefile.am.


Autoreconf không chọn libtoolize thích hợp trên Darwin?
William Pursell

Tôi đang thiết lập một thư mục 'm4' cục bộ. Tôi đã thêm -I m4 --install vào aclocal, nhưng tôi gặp lỗi tương tự. Đây là kịch bản autogen.sh tôi: libtoolize -c -f autoheader -f aclocal -Tôi m4 -install autoconf -f automake --foreign --add-thiếu --force-thiếu --copy
dbeer

1
@dbeer, đã thêm ACLOCAL_AMFLAGSbiến?
Brett Hale

@WilliamPursell không, nó không. MacOS có đặc điểm của GNU libtool là 'glibtool' và cái do Apple cung cấp (không hoạt động như mong đợi của GNU libtool) là 'libtool'. Lưu ý rằng libtoolize cũng được cài đặt dưới dạng 'glibtoolize'. Điều này có thể được ghi đè bằng cách chỉ định LIBTOOLIZE và macro LIBTOOL. Mặc dù mẫu autogen này là tốt, nhưng tốt hơn hết là bạn nên chạy autoreconf -fi và để nó đoán / khôi phục cờ -I từ lần chạy trước, đặc biệt khi phần mềm không phải của bạn.
LeoTh3o

3

Đối với Debian. Các gói bắt buộc là: m4 automake pkg-config libtool


2

Lỗi do autom4te tạo ra. Nếu mọi thứ được thiết lập chính xác, phần mã tạo ra lỗi đó sẽ không bao giờ nhìn thấy 'AC_MSG_ERROR', bởi vì nó phải được mở rộng bởi m4 trước thời điểm đó. Bạn nói rằng lỗi chỉ xảy ra "trong một số thiết lập". Tôi đề nghị rằng trong các thiết lập đó, cài đặt autoconf của bạn là chính xác. Có thể bạn đã cài đặt phiên bản m4 không tương thích.


Tôi đang sử dụng autoconf 2.65 và m4 1.4.13. Những cái này có tương thích không?
dbeer

m4 1.4.13 là đủ mới và không có khả năng là sự cố. Bạn có thể xác định điều gì khác biệt về các thiết lập mà bạn thấy cảnh báo từ những thiết lập mà bạn không thấy không?
William Pursell

Tôi vừa thêm một số thông tin về điều đó vào câu hỏi của mình - bạn có thể nghĩ về điều gì khác có liên quan không? Tôi không am hiểu lắm về công cụ tự động.
dbeer

Chỉ cần nhận thấy - máy 32 bit dường như là những máy gặp khó khăn.
dbeer

2

Sử dụng MacOS X

sudo port install pkgconfig

là giải pháp!


3
câu trả lời này là lỗi thời, sử dụng nấu thay vì cổng
xiamx

2

Trên Mac OS X el Captain with brew, hãy thử:
brew install pkgconfig

Điều này đã làm việc cho tôi.


2

Có hai lý do có thể cho vấn đề đó:

  1. không cài đặt aclocal.
    giải pháp : cài đặt libtool

    • Đối với ubuntu: sudo apt-get install libtool
    • Đối với centos: sudo yum install libtool
  2. đường dẫn đến LIBTOOL.m4 bị lỗi.
    giải pháp:

    1. sử dụng aclocal --print-ac-dir để kiểm tra đường dẫn hiện tại đến aclocal. (Nó thường phải là "/ usr / share / aclocal" hoặc "/ usr / share / aclocal")
    2. Sau đó kiểm tra xem có các tệp * .m4 hay không.
    3. Nếu không, cp các tệp * .m4 tương ứng với đường dẫn này. (Có thể cp /usr/share/aclocal/*.m4 /usr/local/share/aclocal/hoặc cp /usr/local/share/aclocal/*.m4 /usr/share/aclocal/)

Hy vọng nó giúp


1

Tôi đã gặp vấn đề tương tự trên Ubuntu ( error: possibly undefined macro: AC_MSG_ERROR) nhưng các câu trả lời ở trên không phù hợp với tôi. Tôi tìm thấy giải pháp ở đây

Đó là mẹo:

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

1

Sự cố của tôi được giải quyết sau khi tôi cài đặt pkg-config trên Mac (brew install pkg-config)


1

Tôi đã giải quyết điều này bằng cách yum install libtool


sau khi tôi hoàn thành biên dịch pkg-config
VictorV

0

Điều này đã xảy ra với tôi khi tôi quên a, trong các đối số cho macro được xác định cục bộ. Đã dành hàng giờ để cố gắng tìm ra nó (hầu như không quen với công cụ tự động) ...

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

lẽ ra phải

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

Có vẻ như nó nên cho tôi một lỗi hoặc tương tự, nhưng tôi cho rằng là một bộ xử lý macro, nó chỉ có thể làm những gì nó đã nói.


0

Tôi chỉ mất vài giờ cho cái này. Kết luận của tôi:

  • Tùy thuộc vào phiên bản và bất kỳ điều kiện cục bộ nào khác, autoconf sẽ đưa ra thông báo về AC_MSG_ERROR không xác định khi nó gặp BẤT KỲ macro không xác định nào . AC_MSG_ERROR là một con cá trích đỏ. Nguyên nhân cho một macro không xác định có thể là:
    • Lỗi đánh máy trong tên macro trong tệp hoặc macro cục bộ chưa được gửi cùng với tarball
    • Thiếu một gói có thể đi kèm với một tập hợp các macro autoconf, một trong số đó được sử dụng trong tệp. pkg-config thường bị thiếu (vì ví dụ: PKG_CHECK_MODULES), nhưng đây có thể là bất kỳ gói nào khác cung cấp macro cần thiết nhưng không có. Tất nhiên, điều nguy hiểm là điều này xảy ra trước khi tập lệnh cấu hình vẫn chưa tồn tại có thể kiểm tra gói bị thiếu ...

0

Tôi đã gặp vấn đề tương tự khi cố gắng tạo amtk và utthpmock với jhbuild.

Tôi cần cài đặt phiên bản autoconf-archive mới nhất. Hướng dẫn có tại https://github.com/autoconf-archive/autoconf-archive/blob/master/README-maint . Tôi đã làm một bổ sung sudo make installở cuối.

Bước cuối cùng là cập nhật ACLOCAL_PATH:

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

Sau đó source ~/.bashrc, tất cả các macro cuối cùng đã được tìm thấy và các bản dựng thành công.


-1

Tôi đã gặp vấn đề tương tự với cổng Macports "openocd" (đã sửa đổi cục bộ Portfile để sử dụng kho lưu trữ git) trên một máy mới được cài đặt.

Việc khắc phục vĩnh viễn rất dễ dàng, hãy xác định một phụ thuộc vào pkgconfig trong Portfile: depend_lib-append port: pkgconfig

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.