Удалить флаг компилятора/компоновщика из настройки автоинструментов

Есть проект (Antlr3 для 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?

Я понимаю, что флаги компилятора и компоновщика можно переопределить с помощью CFLAGS и LDFLAGS в команде configure. Согласно этой ссылке это что-то вроде

./configure CFLAGS=blah LDFLAGS=blah

Хотя я понимаю, что их можно/нужно использовать как переменные окружения, что-то вроде

CFLAGS=BLAH LDFLAGS=blah ./configure

Однако я думаю, что эти варианты использования попытаются переопределить все CFLAGS или LDFLAGS. Я только хочу исключить флаг -soname (который, как я понимаю, -Wl, означает, что компилятор передает флаг компоновщику.

Ни одна из моих попыток с такими вещами, как LDFLAGS=-soname= или CFLAGS="-Wl,soname -Wl," и их вариациями, пока не увенчалась успехом.

Из этого вопроса видно, что можно удалить флаги из Makefile, но я не вижу, что это применимо к переопределению флагов из командной строки с помощью команды configure. Также можно передать эти переменные команде make вместо команды configure, но это тоже не помогло.

Обратите внимание, мне не имеет смысла менять Makefile, так как он генерируется из команды configure.


person jleeothon    schedule 22.10.2016    source источник


Ответы (1)


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

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

person Diego Elio Pettenò    schedule 23.10.2016
comment
Я знаком с этой проблемой. Antlr3 — это зависимость библиотеки в системе управления пакетами, где зависимости связаны путем предоставления полного пути к gcc без использования -l. Это жестко прописывает путь в исполняемом файле, что в данном случае именно то, что нам нужно. Единственное исключение — это когда зависимость построена с параметром -soname, где жестко прописан не полный путь, а указанное имя. Это вынуждает нас устанавливать Antlr3 в /usr/local/lib, что загромождает среду. - person Sander Mertens; 25.10.2016