2012-10-01 77 views
0

我有一個程序,它利用了boost_regex AC_SEARCH_LIBS。庫boost_regex有一個未定義的符號,與我使用的boost版本有所不同。例如,當我使用boost版本1.49時,libboost_regex.so包含一個未定義的符號,稱爲u_tolower_49。此符號可在libicuuc.so內找到。當函數名稱變化

顯然,如果誰沒有ICU的用戶編譯我的程序,鏈接階段會因爲符號缺少失敗。所以我決定將它添加到configure.ac,以便配置階段在開始編譯之前失敗。

configure.ac

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

現在我的問題是,當用戶的提升的版本是48,符號不再命名u_tolower_49u_tolower_48

我如何可以調整configure.ac,以確保無論配置不成功的提升用戶擁有的版本?

回答

1

巢的檢查:

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.]) 
    ]) 
]) 
+0

+1的想法,但HM,還提高50,提高51,以此類推,上 – qdii

+1

@qdii這是推動佔用的問題!如果他們更改符號名稱來破壞API,則可能有(這可能是)這樣做的原因。你可以通過使用'm4_foreach'循環來減輕痛苦,但是任何解決方案都會變得很糟糕。 –