AC_SEARCH_LIBS在一个本身有依赖关系的静态库上?

时间:2014-02-08 15:28:22

标签: c fortran autoconf automake

如何在configure.ac中使用Autoconf AC_SEARCH_LIBS宏,以便在该库本身依赖其他库时搜索静态库?

考虑这个例子。

我正在为绘图库PLplot编写一组高级包装函数,并将我的目标文件放入静态库libpsm.a中,该库由Automake安装到/ usr / local / lib中。它所代表的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. 解决此问题的“正确”方法是什么?

1 个答案:

答案 0 :(得分:3)

AC_SEARCH_LIBS的第五个参数用于列出依赖库:

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

other-libraries参数应该是一个以空格分隔的标志列表,这些标志将在测试期间传递给链接器:例如-lm -lfoo -lbar

请参阅http://www.gnu.org/software/autoconf/manual/autoconf-2.69/html_node/Libraries.html#Libraries