2009-10-12 3 views
1

lex.yy.c를 lfl로 컴파일하면 gcc는 flex 라이브러리의 일부 .a 파일이 내 코드와 연결될 필요가 있음을 인식합니다. 마찬가지로 yacc에 대해서 -ly 컴파일러 옵션을 지정합니다.-lfl이 flex 라이브러리에 해당한다는 것을 gcc가 어떻게 인식합니까?

다른 말로하면 라이브러리를 만들면 abc.a 프로그램이 -labc로 컴파일 될 때마다 gcc가 라이브러리 abc.a와 링크해야 함을 인식하기를 원합니다. 어떤 구성 변경이 필요합니까?

답변

10

yacc 라이브러리의 이름은 liby.so이며 /usr/lib과 같은 형태로 존재하며 ld이 알고있는 디렉토리입니다.

abc 라이브러리의 이름은 libabc.so (정적 라이브러리의 경우 ".a")이어야하고 ld으로 검색되는 디렉토리에 있어야합니다.

검색된 디렉터리 목록에 /home/foo/libs을 추가하려면 을 ld 명령에 추가하십시오.

+1

OK 멋진, 또는 $의 LD_LIBRARY_PATH로 LD_LIBRARY_PATH에 폴더를 추가합니다 ./ –

+0

는'$ LD_LIBRARY_PATH' 주로 런타임시 해킹으로 사용 libs와에 런타임 링커가 모르는 디렉토리에서 공유 라이브러리를 사용하십시오. 나는 그것이'ld'에 어떤 영향을 미치는지 모른다. – gnud

+1

LD_LIBRARY_PATH는 링커에 영향을주지 않습니다. – JesperE

0

GCC가 abc 라이브러리를 인식하고 -labc을 통해 링크하려는 경우 abc가 정적 라이브러리라고 가정 할 때 라이브러리 파일/아카이브 abc의 이름이 libabc.a인지 확인하고 해당 디렉토리 중 하나 GCC가 .a 파일을 검색하거나 -L 플래그를 추가합니다. 여기서 매개 변수는 libabc.a이있는 디렉토리입니다.

2

아무 것도 구성 할 필요가 없습니다. 라이브러리 libabc.a 전화, 다음 명령 줄을 사용하십시오

gcc ... -L<path-to-libabc.a> -labc 
관련 문제