2011-07-16 51 views
0

我很新的自動工具,它看起來像我有libtool的一個問題 - 它不會構建一個共享庫,使代替靜態的......問題編譯具有自動工具共享庫/插件

這是我的configure.ac的樣子:

AC_PREREQ([2.67]) 
AC_INIT([helloworld], [1.0], [...]) 
AM_INIT_AUTOMAKE([foreign]) 
LT_INIT 

# Checks for programs. 
AC_PROG_CXX 
AC_PROG_LIBTOOL 

# Checks for header files. 
AC_CHECK_HEADERS([alloca.h inttypes.h stdint.h]) 

AC_CONFIG_FILES([Makefile]) 
AC_OUTPUT 

和Makefile.am:

noinst_LTLIBRARIES=helloworld.la 

helloworld_la_CXXFLAGS=-w -DLINUX ... 
helloworld_la_LDFLAGS=-avoid-version -module -shared -export-dynamic 

# List of source files 
helloworld_la_SOURCES=helloworld.cpp ... 

有什麼問題嗎?

感謝您的任何幫助。

+0

可能與您的問題無關,但LT_INIT是AC_PROG_LIBTOOL的替代品,因此您可以從configure.ac中刪除AC_PROG_LIBTOOL –

+0

爲什麼要嘗試構建共享便利庫?你打算使用noinst_LTLIBRARIES而不是lib_LTLIBRARIES嗎? –

+0

-DLINUX有幾個問題。 1)它屬於helloworld_la_CPPFLAGS,因爲它用於預處理器。 2)您不應該將您的編譯基於平臺,而是基於特定功能。 3)如果您忽略規則2,則應該在配置時確定平臺,而不是將其硬編碼到Makefile.am中。 –

回答

1

我相信你想

 
lib_LTLIBRARIES = helloworld.la 

使用noinst指示libtool來構建一個簡易庫,而那些 通常不共享。

+0

正確,但我想補充一點,它令人討厭libtool爲你決定。例如,我在一個加載(共享庫)測試插件的項目中有測試程序。它們不是自動的單元測試,因此它們不屬於'check_LTLIBRARIES' - 但它們不適用於安裝。所以'noinst_LTLIBRARIES'是他們去的唯一明智的地方。 – ptomato