我正在做一個configure.ac文件,檢查庫的依賴。使操作系統獨立的配置文件,檢查捲曲依賴
的完整源代碼,
AC_CONFIG_AUX_DIR([build-aux])
AC_INIT([myprogram], [0.1], [])
AM_INIT_AUTOMAKE
AC_PROG_CC
AC_CHECK_LIB([curl], [curl_easy_setopt], [echo "libcurl library is present" > /dev/tty], [echo "libcurl library is not present" > /dev/tty])
AC_CHECK_LIB([sqlite3], [sqlite3_open], [echo "sqlite3 library is present" > /dev/tty], [echo "sqlite library is not present" > /dev/tty])
AC_CHECK_LIB([pthread], [pthread_create], [echo "pthread library is present" > /dev/tty], [echo "pthread library is not present" > /dev/tty])
AC_CHECK_LIB([crypto], [SHA256], [echo "crypto library is present" > /dev/tty], [echo "crypto library is not present" > /dev/tty])
AC_CONFIG_FILES([Makefile])
AC_OUTPUT
「myprogram」是需要被安裝在衆多用戶pcs.So程序,依賴檢查需要開始時做的,找到這些是否安裝了四個庫。
在系統中,/usr/lib/i386-linux-gnu/libcurl.so在那裏,當我運行配置文件時,它給出消息「libcurl庫存在」。但是,在/usr/lib/i386-linux-gnu/libcurl.so.1.0或其他類似的系統中,它告訴libcurl不存在。如果我創建一個到libcurl.so的軟鏈接,那麼它正確地告訴libcurl存在。 ln -s /usr/lib/i386-linux-gnu/libcurl.so.1.0.0 /usr/lib/i386-linux-gnu/libcurl.so.Same也適用於其他庫。
其實,我想讓這個過程自動化。有沒有辦法做到這一點,而無需手動進行軟鏈接?我的意思是,通過對configure.ac文件本身進行更改,以便配置可以在任何機器上運行,而無需進行軟鏈接。
安裝庫時,安裝程序通常會創建一個從庫實名(libcurl.so.1.0.0)到其鏈接器名稱(libcurl.so)的符號鏈接,以允許鏈接器查找實際庫file.But並不總是正確的。有時它不會創建鏈接器名稱。這就是爲什麼會出現這些複雜情況。所以檢查鏈接器名稱的程序認爲該庫沒有安裝。
也許有關... [如何告訴Autoconf「需要符號A或B」來自LIB?](https://stackoverflow.com/q/39285733/608639) – jww
這是計算器。向我們展示代碼。一個庫的配置檢查應該只是試圖鏈接它,如果它的工作,它的工作原理... –
你可能想看看[打印信息]的各種方式(https://www.gnu.org/software /autoconf/manual/autoconf.html#Printing-Messages)也在autoconf中。 pthread有一些特殊的要求,所以它有一個[宏](https://www.gnu.org/software/autoconf-archive/ax_pthread.html)。當你在它的時候,你可能想要檢查你在[autoconf檔案]中的其他庫(https://www.gnu.org/software/autoconf-archive/The-Macros.html#The-Macros)網上的人們已經爲你要找的所有庫寫了宏。 – ldav1s