2014-09-25 115 views
1

我目前正在嘗試使用自動工具構建和安裝PAM模塊。雖然建設進程順利,但install目標的行爲並不像我想要的那樣。構建PAM模塊並安裝到/ lib /安全

$ make install 
bash ../libtool --mode=install install -c pam_mymodule.la '/usr/local/lib' 

在上述片輸出的,我除去GNU可執行絕對路徑。

兩件事情都困擾着我在此呼籲:

  • make試圖移動pam_mymodule.la文件,而我寧願喜歡它移動.libs/pam_mymodule.so文件。
  • make試圖將其移動到/usr/local/lib,而/lib/security是PAM模塊更合適的選擇。

如何更改安裝配置?

+0

相關:http:// stackoverflow。com/questions/8669303/gnu-autotools-install-binaries-into-bin-sbin-usr-bin-and-usr-sbin-intera – ptomato 2014-09-26 07:19:14

回答

3

爲了解決您的兩件事情依次是:

  • libtool腳本截獲install指令,並安裝.so文件中的適當位置。

  • 它把它在/usr/local/lib可能是因爲你lib_LTLIBRARIES上市啦(雖然我不能肯定,如果你不顯示您的代碼)和你的--prefix被設置爲它的默認/usr/local。因爲自動工具的官方立場是,所有用戶安裝的程序屬於在/usr,而許多其他工具想到事情在/lib/something

這最後一個是困難的。下面是做這件事,我個人認爲錯:

# Don't do this 
libsecuritydir = /lib/security 
libsecurity_LTLIBRARIES = pam_mymodule.la 

這繞過--prefix,如果你嘗試做一個本地安裝你的包而不直接寫入到您的生活系統,這將去可怕,可怕的錯誤,相信我,你會想在某個時候做。它也會阻止你在大多數Linux發行版的打包系統中打包你的程序。

正確的方法是把責任推到誰安裝包:使用AC_ARG_WITH添加--with-libsecuritydir參數configure.ac並讓這默認爲$(libdir)/security

AC_ARG_WITH([libsecuritydir], 
    [AS_HELP_STRING([--with-libsecuritydir], 
     [Directory for PAM modules, pass /lib/security for live install])], 
    [], [with_libsecuritydir='$(libdir)/security']) 
AC_SUBST([libsecuritydir], [$with_libsecuritydir]) 

,然後就去做

libsecurity_LTLIBRARIES = pam_mymodule.la 

in Makefile.am

當您想要直接在系統中安裝實時版本(或正在構建二進制包)時,請將--with-libsecuritydir=/lib/security傳遞給configure

+0

完美,謝謝!我擔心在這裏我會遇到一些與可移植性相關的問題,但使用一個選項確實是最好的解決方案。不過,請注意一點:你的'AS_IF'可能希望對'x'而不是'xno'進行測試,否則當沒有指定該選項時,libsecuritydir將保持爲空(除非明確地使用--with- libsecuritydir = no'。 – 2014-09-26 20:52:42

+0

確實,我應該使用AC_ARG_WITH的第四個_action-if-not-given_參數來做這件事,我將編輯答案。 – ptomato 2014-09-27 04:51:37