Dll 函数名变化时的AC_SEARCH_LIBS

Dll 函数名变化时的AC_SEARCH_LIBS,dll,makefile,autoconf,Dll,Makefile,Autoconf,我有一个利用boost\u regex的程序。库boost\u regex中有一个未定义的符号,其名称与我使用的boost版本不同。例如,当我使用boost版本1.49时,libboost\u regex.so包含一个名为u\u tolower\u 49的未定义符号。此符号可在libicuuc.so中找到 显然,如果没有icu的用户编译我的程序,链接阶段将失败,因为该符号丢失。因此,我决定将其添加到configure.ac中,以便在开始编译之前配置阶段失败 配置.ac ... AC_SEARCH

我有一个利用
boost\u regex
的程序。库
boost\u regex
中有一个未定义的符号,其名称与我使用的boost版本不同。例如,当我使用boost版本1.49时,
libboost\u regex.so
包含一个名为
u\u tolower\u 49
的未定义符号。此符号可在libicuuc.so中找到

显然,如果没有icu的用户编译我的程序,链接阶段将失败,因为该符号丢失。因此,我决定将其添加到configure.ac中,以便在开始编译之前配置阶段失败

配置.ac

...
AC_SEARCH_LIBS([u_tolower_49],[icuuc], , AC_MSG_ERROR([Unable to find icuuc, make sure ICU is installed.]))
...
现在我的问题是,当用户的boost版本为48时,符号不再命名为
u\u-tolower\u 49
,而是
u\u-tolower\u 48

如何调整configure.ac以确保无论用户的boost版本如何,配置都会失败?

嵌套检查:

AC_SEARCH_LIBS([u_tolower_49],[icuuc],[],[
    AC_SEARCH_LIBS([u_tolower_48],[icuuc],[],[
        AC_MSG_ERROR([Unable to find icuuc, make sure ICU is installed.])
    ])
])

+1的想法,但嗯,还有50,51,等等,on@qdii这是boost需要解决的问题!如果他们更改符号名称以破坏api,那么(可能)这样做是有原因的。您可以通过使用
m4\u foreach
循环来减轻痛苦,但任何解决方案都是黑客的。