2014-02-08 75 views
1

如何在configure.ac中使用Autoconf AC_SEARCH_LIBS宏,以便在庫本身依賴於其他庫時搜索靜態庫?AC_SEARCH_LIBS這個靜態庫本身有依賴關係嗎?

考慮這個例子。

我正在爲繪圖庫PLplot編寫一套高級包裝函數,並將我的目標文件放入靜態庫libpsm.a中,該庫被Automake安裝到/ usr/local/lib中。它要depdends的PLplot對象不在庫中。接下來,我有另一個程序,我打算直接使用我的庫,間接使用PLplot庫。在該程序的configure.ac中,我有這個。 sm_device函數是我的庫中的函數。

AC_SEARCH_LIBS([sm_device],[psm],[],[ 
    AC_MSG_ERROR([unable to find the sm_device function]) 
]) 

我遇到的問題是,這個測試失敗,因爲AC_SEARCH_LIBS宏試圖編譯鏈接到搜索庫,libpsm.a一個小的測試程序,並調用函數sm_device,但將失敗,因爲該測試程序也不鏈接到它間接依賴的PLplot庫。

  1. 這是如何做到這給出的配置,我的圖書館是一個靜態庫,它不包括PLplot庫,並且它不使用PLplot的共享對象庫?
  2. 我應該切換到共享庫嗎?即,使用PLplot的共享庫,也許使我的庫共享庫?這是必要的,還是隻是推薦?
  3. 什麼是解決此問題的「正確」方法?

回答

3

第五屆參數AC_SEARCH_LIBS是列出依賴庫:

AC_SEARCH_LIBS (function, search-libs, [action-if-found], 
    [action-if-not-found], [other-libraries]) 

其他的庫的說法應該是,將在測試過程中被傳遞給鏈接標誌的空格分隔列表:如-lm -lfoo -lbar

請參閱http://www.gnu.org/software/autoconf/manual/autoconf-2.69/html_node/Libraries.html#Libraries

+0

謝謝!而且,事實證明,我之前使用PKG_CHECK_MODULES獲取了PLplot庫,然後可以在$ PLPLOT_LIBS中替換第五個參數。好極了! –