1
我想從自動工具(Automake的/ Libtool程序)建立一個圖書館Autotools&Libtool - 如何從多個源目錄編譯共享庫?
我的目錄結構是:
src/MyLib/*some_sources*.cpp/.h + a Makefile.am
src/MyLib/Parsers/*some_other_sources.cpp/.h Makefile.am
當我把我所有的源文件在同一目錄(所以,沒有「解析器「subdir),一切工作正常。 (彙編,然後從其他程序鏈接)
但是,當我嘗試我的「理想結構」(基本源文件夾+「解析器」子目錄)時,我得到一個鏈接錯誤,當我嘗試編譯程序庫:
<< usr/local/lib/mylib.so: undefined reference to <a function from "/Parsers" subdir > >>
看來,Libtool程序不編譯期間靜態鏈接我的子目錄「分析器」(可能是考慮到它作爲外部共享庫?)
這裏是我的基地「Makefile.am」:
lib_LTLIBRARIES = mylib.la
SUBDIRS = Parsers .
mylib_la_SOURCES = <base_dir_source_files>
而我的 「Makefile.am」 解析器子目錄:
mylib_la_SOURCES = <parsers_dir_source_files>
當然,我libtoolize-d,autoreconf-ED allthing,打造 「分析器」 子目錄之後。
非常感謝您的幫助。
謝謝,我試過了,但我似乎它在遞歸的Makefile衝突(我的錯誤因爲.o/.lo是在topdir中創建的),所以我只刪除了所有的子文件MakefileS,並創建了一個獨特的Makefile,它調用所有源文件,如「/MyVery/Long/Path/To/Source.cpp」。這很醜,但它工作正常。 – Neozaru
哦,然後嘗試使用'$(srcdir)'變量。甚至是'$(top_srcdir)/ MyLib'。但是,在Makefile.am中完全絕對路徑,你的項目不可重定位,這不是一個好主意。 – rodrigo
不,這是一個相對路徑,但是項目結構非常深; – Neozaru