linux gcc 빌드에서 link 옵션중에 -L -l 을 사용할 때 질문입니다.

trymp의 이미지

일반적인 linux 빌드에서 gcc 에 link 옵셥을 줄 때,

라이브러리를 지정하기 위해 -L 을 사용하잖아요

원래는 .so 를 찾는 패스로 알고 있는데요.

파일의 경로가 아래와 같을 때

a.c
./test/ok.so
./test/ok.a

# gcc -o a.c -L./test -lok

라고 할때 만일 ok.so 가 없다면 ok.a 로 정적 링크를 하게 되나요?

컴파일이 이상하게 되서 .so 가 없다면 .a 정적 라이브러리를 링크하는 것인지

표준이 맞는 것인지 궁금합니다.

고수님들의 조언 부탁드립니다.

익명 사용자의 이미지

> 라이브러리를 지정하기 위해 -L 을 사용하잖아요
> 원래는 .so 를 찾는 패스로 알고 있는데요.

아닙니다. -L 은 정적이든 동적이든 라이브러리를 찾는 패스를 정해주는 것입니다.

> 라고 할때 만일 ok.so 가 없다면 ok.a 로 정적 링크를 하게 되나요?

정적 링크를 하려면 -static 플래그를 주어야합니다.
동적 링크에 실패했다고 자동으로 정적 링크를 하지는 않습니다.
표준과는 관계 없고 그냥 컴파일러 마음입니다.

그리고 라이브러리 파일 이름을 libok.a libok.so로 바꿔주세요.