2016-10-22 78 views
0

有一個項目(Antlr3 for C),可以用./configure && make && make install構建。從autotools中刪除編譯器/鏈接器標誌配置

編譯命令中使用的其中一個標誌是-Wl,-soname -Wl,libantlr3c.so。整個命令是:

libtool: link: gcc -shared .libs/antlr3baserecognizer.o .libs/antlr3basetree.o \ 
.libs/antlr3basetreeadaptor.o .libs/antlr3bitset.o .libs/antlr3collections.o \ 
.libs/antlr3commontoken.o .libs/antlr3commontree.o .libs/antlr3commontreeadaptor.o \ 
.libs/antlr3commontreenodestream.o .libs/antlr3convertutf.o .libs/antlr3cyclicdfa.o \ 
.libs/antlr3debughandlers.o .libs/antlr3encodings.o .libs/antlr3exception.o \ 
.libs/antlr3filestream.o .libs/antlr3inputstream.o .libs/antlr3intstream.o \ 
.libs/antlr3lexer.o .libs/antlr3parser.o .libs/antlr3rewritestreams.o \ 
.libs/antlr3string.o .libs/antlr3tokenstream.o .libs/antlr3treeparser.o \ 
-m64 -Wl,-soname -Wl,libantlr3c.so -o .libs/libantlr3c.so 

如何才能刪除-Wl,-soname -Wl,libantlr3c.so部件?

我知道編譯器和鏈接器標誌可以用configure命令中的CFLAGSLDFLAGS覆蓋。據this link,它像

./configure CFLAGS=blah LDFLAGS=blah 

雖然我明白,他們可以/應作爲環境變量,像

CFLAGS=BLAH LDFLAGS=blah ./configure 

但是,我認爲,這些用途會嘗試覆蓋全部爲CFLAGSLDFLAGS。我只是想排除-soname標誌(其中,我明白了,-Wl,意味着編譯器傳遞一個標誌鏈接。

我嘗試的東西像LDFLAGS=-soname=CFLAGS="-Wl,soname -Wl,",以及它們的變化沒有,成功至今

this question看起來好像有可能從Makefile中刪除標誌,但是我看不到用於使用命令configure重寫命令行中的標誌也可以提供這些變量到make命令而不是configure命令,但這也不成功。

請注意,因爲它是從configure命令生成的,所以更改Makefile是沒有意義的。

回答

0

您不能刪除-soname,因爲它是您使用GCC創建共享庫的方式的一部分,並且直接來自libtool。既然你不能真正爲沒有soname的ELF構建一個共享對象(當然,你可以,但它不是很有用),libtool不會讓你刪除它。

你可能最好宣佈你試圖達到的目標,因爲我覺得在這種情況下它與-soname沒有什麼關係。

+0

我對這個問題很熟悉。 Antlr3是程序包管理系統中庫的依賴關係,依賴關係通過向gcc提供完全限定的路徑而鏈接,而不使用-l。這硬編碼在這種情況下,正是我們需要的可執行文件的路徑。唯一例外的情況是,依賴項是使用-soname構建的,其中不是完整路徑是硬編碼的,而是指定的名稱。這迫使我們將Antlr3安裝到/ usr/local/lib,這會使環境混亂。 –