有一個項目(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命令中的CFLAGS
和LDFLAGS
覆蓋。據this link,它像
./configure CFLAGS=blah LDFLAGS=blah
雖然我明白,他們可以/應作爲環境變量,像
CFLAGS=BLAH LDFLAGS=blah ./configure
但是,我認爲,這些用途會嘗試覆蓋全部爲CFLAGS
或LDFLAGS
。我只是想排除-soname
標誌(其中,我明白了,-Wl,
意味着編譯器傳遞一個標誌鏈接。
我嘗試的東西像LDFLAGS=-soname=
或CFLAGS="-Wl,soname -Wl,"
,以及它們的變化沒有,成功至今
從this question看起來好像有可能從Makefile中刪除標誌,但是我看不到用於使用命令configure
重寫命令行中的標誌也可以提供這些變量到make
命令而不是configure
命令,但這也不成功。
請注意,因爲它是從configure
命令生成的,所以更改Makefile是沒有意義的。
我對這個問題很熟悉。 Antlr3是程序包管理系統中庫的依賴關係,依賴關係通過向gcc提供完全限定的路徑而鏈接,而不使用-l。這硬編碼在這種情況下,正是我們需要的可執行文件的路徑。唯一例外的情況是,依賴項是使用-soname構建的,其中不是完整路徑是硬編碼的,而是指定的名稱。這迫使我們將Antlr3安裝到/ usr/local/lib,這會使環境混亂。 –