2015-12-11 91 views
1

我正在嘗試將一個大項目交叉編譯爲android(太大而無法將其移植到ndk-build格式)。我來自Java世界,所以我對這些編譯C,C++都很陌生。事情是這樣的:構建獨立庫

這個大項目,使用xerces-c作爲它當時依賴於ICU代碼轉換器的庫。我交叉編譯它們,導致libxerces-c.a,libicuuc.a和libicudata.a

當我交叉編譯我的大項目時,configure檢查頭(它們)和xerces-c庫。但是,當我運行make命令時,執行失敗,因爲-licuuc -licudata不在編譯命令中。

有沒有辦法創建一個包含libicuuc和libicudata的獨立libxerces-c?一些我可以包含在CFLAGS,CXXFLAGS或LDFLAGS中的標誌?配置腳本中的一些參數?

因爲我對此很新,所以一個例子會非常有用。 在此先感謝您的幫助

+1

有什麼不好只是指定需要額外的庫鏈接? –

+0

我需要更改makefiles(幾個),並且這發生在9個庫中。不僅僅是xerces-c,最終我最終得到了1000 -l標誌。我只是想知道是否有任何的方式來做到這一點,減少更換20K線的所有的時間配置並生成文件 –

+0

編譯器/連接器選項是特定於實現。可能有辦法實現你所要求的,但這取決於你的(交叉)編譯器。 –

回答

0

在Makefiles中,您可以定義要在所有命令行中使用的表達式。如果您正確使用此設施,則可以根據需要在多個(或幾個)文件上執行相同的命令。在你從其他項目中看到的Makefiles中,你會發現人們通常使用CFLAGS作爲C編譯器的(驚喜)標誌和選項,LIBS作爲鏈接器的東西,但是你可以使用你喜歡的任何名稱作爲宏。

您也可以定義要操作的文件列表以及它們依賴的文件。

在Linux上一些包也有一個配置文件安裝,讓所謂的pkg-config的應用中找出所有的標誌,併爲封裝庫選項。這避免了必須將顯式路徑硬連線到Makefile中。

這裏有幾個教程:

Simple tutorial.

Another intro