【问题标题】:Remove a compiler / linker flag from autotools configure从自动工具配置中删除编译器/链接器标志
【发布时间】:2017-03-04 22:42:23
【问题描述】:

有一个项目(Antlr3 for C)可以用./configure && make && make install构建。

编译命令中使用的标志之一是-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 部分?

我知道编译器和链接器标志可以在配置命令中被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 命令,但这也不成功。

请注意,更改 Makefile 对我来说没有意义,因为它是由 configure 命令生成的。

【问题讨论】:

    标签: makefile autotools configure ldflags cflags


    【解决方案1】:

    您不能删除 -soname,因为它是您使用 GCC 构建共享库的方式的一部分,并且直接来自 libtool。因为你不能真正为 ELF 构建一个没有 soname 的共享对象(嗯,你可以,但它不是真的有用)libtool 不会让你删除它。

    你可能最好声明你试图实现的目标,因为我觉得在这种情况下它与-soname 没有任何关系。

    【讨论】:

    • 我对这个问题很熟悉。 Antlr3 是包管理系统中库的依赖项,其中依赖项通过提供 gcc 的完全限定路径来链接,而不使用 -l。这将硬编码可执行文件中的路径,在这种情况下,这正是我们所需要的。唯一的例外是使用 -soname 构建依赖项时,其中不是硬编码完整路径,而是指定名称。这迫使我们将 Antlr3 安装到 /usr/local/lib,这会使环境变得混乱。
    猜你喜欢
    • 1970-01-01
    • 2013-06-07
    • 2015-04-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-11-24
    • 1970-01-01
    相关资源
    最近更新 更多