내 C 프로젝트에서 quirc 라는 C 라이브러리를 사용하려고합니다 . 지금까지 Linux 파일 을 사용 libquirc.dylib.1.0
하는를 수정하여 생성했습니다 .Makefile
.so
quirc / helloquirc.c
#include <quirc.h>
#include <stdio.h>
int main() {
struct quirc *qr;
qr = quirc_new();
if (!qr) {
printf("Failed to allocate memory");
}
quirc_destroy(qr);
return 0;
}
저장소의 루트에 위의 소스 파일을 만들었습니다. 다음 명령을 사용하여 컴파일하고 있습니다.
gcc helloquirc.c -lquirc -L. -Ilib -o helloquirc
내가 이해하기 위해 -l
플래그는 동적 라이브러리의 이름을 지정 하고 플래그는 동적 라이브러리 -L
의 위치를 -I
지정하고 플래그는 헤더 파일의 위치를 -o
지정하고 실행 파일의 이름을 지정합니다.
이 명령을 실행하면 다음 오류가 발생합니다.
ld: library not found for -lquirc
clang: error: linker command failed with exit code 1 (use -v to see invocation)
Makefile
이 라인을 사용하여 변경
.PHONY: libquirc.dylib
libquirc.dylib: libquirc.$(LIB_VERSION).dylib
libquirc.$(LIB_VERSION).dylib: $(LIB_OBJ)
$(CC) -shared -dynamiclib -o $@ $(LIB_OBJ) $(LDFLAGS) -lm
의 다른 인스턴스 .so.$(LIB_VERSION)
를.$(LIB_VERSION).dylib
quirc
만들어진 방식 에 문제가 있습니다. 올바른 라이브러리 이름은 libquirc.1.0.dylib
라는 심볼릭 링크와 같은 것 입니다 libquirc.dylib
.
quirc에는 gyp 또는 cmake와 같은 합리적인 것을 사용하는 대신 손으로 작성한 makefile이있는 것 같습니다. 여러 플랫폼에서 공유 라이브러리를 빌드하지 않는 한 손으로 쓴 메이크 파일은 괜찮습니다.
그러나 직접 컴파일하는 경우 정적 라이브러리를 대신 사용하면 더 간단하다는 것을 알 수 있습니다. 누구와도 공유하지 않는 경우 공유 라이브러리를 갖는 것은 의미가 없습니다 (다른 프로그램이 똑같은 사본 을 사용하지 않는 경우 libquirc
).
이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.
침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제
몇 마디 만하겠습니다