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