2016-10-22 6 views
0

Существует проект (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.

ответ

0

Вы не можете удалить -soname, потому что это часть того, как вы создаете общую библиотеку с GCC, и поставляется прямо с libtool. Поскольку вы не можете создать общий объект для ELF без соната (ну, вы можете, но это не очень полезно) libtool не позволит вам удалить это.

Возможно, вам лучше объявить, чего вы пытаетесь достичь, потому что у меня есть чувство, что в этом случае у него нет ничего общего с -soname.

+0

Я знаком с этой проблемой. Antlr3 является зависимостью библиотеки в системе управления пакетами, где зависимости связаны путем предоставления полного пути к gcc без использования -l. Это hardcodes путь в исполняемом файле, который в этом случае является именно тем, что нам нужно. Единственное исключение - когда зависимость построена с -soname, где не полный путь жестко запрограммирован, а указанное имя. Это заставляет нас устанавливать Antlr3 в/usr/local/lib, что загромождает среду. –