0

でビルドできるプロジェクト(C用のAntlr3)があります./configure && make && make install

コンパイル コマンドで使用されるフラグの 1 つに-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その部分だけを取り除くにはどうすればよいですか?

CFLAGSコンパイラとリンカーのフラグは、LDFLAGSconfigure コマンドでオーバーライドできることを理解しています。このリンクによると、それは次のようなものです

./configure CFLAGS=blah LDFLAGS=blah

環境変数として使用できる/使用する必要があることは理解していますが、次のようなものです

CFLAGS=BLAH LDFLAGS=blah ./configure

ただし、これらの使用はすべてのorをオーバーライドしようとすると思います。フラグを除外したいだけです(これは、コンパイラがフラグをリンカーに渡すことを意味します。CFLAGSLDFLAGS-soname-Wl,

LDFLAGS=-soname=またはのようなものCFLAGS="-Wl,soname -Wl,"、およびそれらのバリエーションを使用した私の試みは、これまでのところ成功していません。

この質問から、Makefile 内からフラグを削除できたかのように見えますが、コマンドを使用してコマンド ラインからフラグをオーバーライドすることに適用できるとは思えませんconfigure。これらの変数をmakeコマンドの代わりにコマンドに提供することも可能ですconfigureが、それも成功しませんでした。

コマンドから生成されるため、Makefile を変更しても意味がないことに注意してくださいconfigure

4

1 に答える 1

0

-sonameこれは GCC で共有ライブラリを構築する方法の一部であり、 から直接取得されるため、削除できませんlibtool。soname なしでは ELF 用の共有オブジェクトを実際に構築することはできないため (もちろんできますが、あまり役に立ちません)、libtool ではそれを削除できません。

何を達成しようとしているのかを宣言した方がよいでしょう-soname

于 2016-10-23T10:18:56.407 に答える