2016-10-22 2 views
0

./configure && make && make install으로 빌드 할 수있는 프로젝트 (Antlr3 for C)가 있습니다.autotools에서 컴파일러/링커 플래그 제거 configure

컴파일 명령에 사용되는 플래그 중 하나는 -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 부분 만 어떻게 제거 할 수 있습니까?

configure 명령에서 컴파일러 및 링커 플래그를 CFLAGSLDFLAGS으로 덮어 쓸 수 있다는 것을 알고 있습니다. 나는, 그들은/환경 변수 표기 할 수 그러나

CFLAGS=BLAH LDFLAGS=blah ./configure 

같은 것을 이해하지만 this link에 따르면,

./configure CFLAGS=blah LDFLAGS=blah 

같은이야, 나는 그 용도가 재정 시도 것이라고 생각 모두 CFLAGS 또는 LDFLAGS입니다. 난 단지 -Wl, 컴파일러 링커에 플래그를 전달하는 의미 이해의 -soname 플래그 (제외 할. LDFLAGS=-soname= 또는 CFLAGS="-Wl,soname -Wl,", 이들의 변화 같은 것들을 내 시도

없음, 지금까지 성공하지 않았다

this question에서 메이크 파일 내에서 플래그를 제거 할 수있는 것처럼 보이지만, configure 명령을 사용하여 명령 줄에서 플래그를 무시하는 것이 적용되지 않습니다. 이러한 변수를 제공 할 수도 있습니다. configure 명령 대신 make 명령을 실행했지만 성공하지 못했습니다.

참고 : configure 명령으로 생성 되었기 때문에 Makefile을 변경하는 것이 의미가 없습니다.

답변

0

-soname은 GCC로 공유 라이브러리를 만드는 방법의 일부이므로 제거 할 수 없습니다. 바로 libtool에서옵니다. ELF에 대한 공유 객체를 실제로 만들 수 없기 때문에 (사실, 유용 할 수는 없지만), libtool은 그것을 제거 할 수 없습니다.

이 경우 실제로는 -soname과 관련이 없다고 생각하기 때문에 성취하려는 것을 선언하는 것이 좋습니다.

+0

이 문제에 익숙합니다. Antlr3은 -l을 사용하지 않고 gcc에 대한 완전한 경로를 제공하여 종속성이 연결되는 패키지 관리 시스템에서 라이브러리의 종속성입니다. 이것은 실행 파일의 경로를 하드 코드합니다.이 경우 실행 파일은 필요한 경로입니다. -soname을 사용하여 종속성을 구축 할 때만 예외가 있습니다. 전체 경로가 하드 코드되지는 않지만 지정된 이름은 하드 코딩됩니다. 이렇게하면 환경을 복잡하게 만드는 Antlr3을/usr/local/lib에 설치해야합니다. –