Существует проект (Antlr3 для 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
?
Я понимаю, что флаги компилятора и компоновщика могут быть переопределены CFLAGS
и LDFLAGS
в команде configure. По словам 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
, но это также не удалось.
Обратите внимание: для меня не было смысла изменять Makefile, поскольку он создан из команды configure
.
Я знаком с этой проблемой. Antlr3 является зависимостью библиотеки в системе управления пакетами, где зависимости связаны путем предоставления полного пути к gcc без использования -l. Это hardcodes путь в исполняемом файле, который в этом случае является именно тем, что нам нужно. Единственное исключение - когда зависимость построена с -soname, где не полный путь жестко запрограммирован, а указанное имя. Это заставляет нас устанавливать Antlr3 в/usr/local/lib, что загромождает среду. –