makefile의 LD 플래그에서 /usr/lib보다 플랫폼별 라이브러리가 있는 디렉토리의 우선순위를 지정하는 것이 더 낫습니까?

makefile의 LD 플래그에서 /usr/lib보다 플랫폼별 라이브러리가 있는 디렉토리의 우선순위를 지정하는 것이 더 낫습니까?

내 솔루션(Raspbian Buster용)의 makefile에는 LDFLAGS다음 정의가 포함되어 있습니다.

LDFLAGS=-L/usr/lib -L/usr/lib/arm-linux-gnueabihf

...표준 libdir이 플랫폼별 libdir보다 우선합니다. 안타깝게도 /usr/lib오래된 C++ ABI로 인해 링크할 수 없는 라이브러리 중 하나를 사용하는 데 문제가 있습니다 . 그러나 디렉터리를 바꾸면 모든 것이 잘 작동합니다.

LDFLAGS=-L/usr/lib/arm-linux-gnueabihf -L/usr/lib

일반적으로 제네릭보다 플랫폼 종속 libdir을 선언하는 것이 더 낫습니까 /usr/lib? 감사해요.

고쳐 쓰다:해당 레시피는 상당히 표준적이며 다음과 같습니다.

$(EXEC) : $(OBJECTS)
    $(CC) $(CFLAGS) $(OBJECTS) -o $(EXEC) $(LDFLAGS) $(LIBRARIES)

$(OBJECTS) : $(SRC)
    $(CC) $(CFLAGS) -c $(SRC)

답변1

LDFLAGS최후의 수단으로 사용하십시오 . makefile에서 사용한다면 이는 소프트웨어를 이식 불가능하게 만드는 좋은 방법입니다.

필요한 명령줄을 직접 사용하는 Makefile을 작성하는 것이 더 좋습니다 ld.

예를 들어 다음과 같은 명령줄을 사용할 수 있습니다.

 $(CC) $(CFLAGS) $(OBJECTS) -o $@ $(LDPATH:%=-L%) $(LIBRARIES)

그리고 도서관 검색을 위한 검색 디렉토리 목록을 LDPATH.

에 대한 패턴 일치 매크로 확장은 LDPATHPOSIX 사양의 일부가 아니지만 이 기능은 1986년 SunPro Make 에 의해 도입되었으며 make많은 make 구현에 의해 복사되었습니다 smake. gnu make이전 버전이 있는 경우 명령줄에서 각 라이브러리에 대한 디렉토리 항목을 수동으로 검색 make해야 합니다 .-Lpath

관련 정보