2011-01-18 39 views
0

是否有可能建立一個使用另一個已經編譯的庫的庫?鏈接問題 - 試圖建立一個庫,並使用另一個檔案

我有一些做了用於正常生成可執行文件。在製作可執行文件時,我使用-L ../include/lib1.a來包含原始庫。現在

,我建立正在調用從可執行文件,這是從來沒有建成一個庫中的類一個單獨的程序,只需編譯成可執行文件一樣

${CPP} -c ${INC} ${CFLAGS} MyFile.cpp ${OBJ} ${LIB2} -lm 

一個鏈接,LIB2包括參考到lib1.a

現在我想直接訪問類MyFile.cpp,當我將它構建到它自己的庫lib2.a中,並嘗試從新程序中調用它時,出現一堆錯誤它引用的類缺失。這是儘管事實上,建立新的方案時,我在這兩個了lib1.a鏈接和lib2.a

+0

您能否顯示您的make -n?猜測變量替換是棘手的。 – chrisaycock 2011-01-18 23:24:10

回答

0

是的,你應該能夠做到這一點。看到你正在得到的確切的錯誤是有幫助的。

如果您將源代碼編譯到庫中,並在命令行上提供它們使用的庫,編譯器會將其他庫()放入中。如果發生這種情況,然後有人試圖針對你的圖書館和其他人建立一個程序,他們會得到一大堆「雙重定義的符號」錯誤。

+0

如果兩個或多個庫定義了一個符號,則只會使用其中一個符號(除非其他符號被其他符號拉入)。將使用的是第一個庫的順序,即它們被指定的順序。只要首先指定新庫,上述技術不會與原始庫一起生成錯誤。 – 2011-01-19 01:23:58

1

應:

-L../include/lib1.a 

不是:

-L../include -llib1 

即-L表示庫搜索路徑和-l存檔名稱?

+0

好點。另外,將二進制庫文件放入「包含」目錄不是很奇怪嗎? – 2011-01-19 13:40:38

0

當你建立lib2.a它將不包含的對象包含在lib1.a.文件

您的最終可執行文件必須鏈接到它們兩者中。

相關問題