나는 gcc
및 ar
이라는 정적 라이브러리 libstuff.a
을 만들었습니다. 라이브러리를 /custom/lib/dir/
에, 헤더 파일을 /custom/include/dir/
에 설치했습니다. 아카이브에 대해 다른 응용 프로그램을 컴파일하려고하면 문제가 발생합니다.정적 라이브러리에 대한 컴파일 문제
기본적으로 컴파일하려고하는 응용 프로그램은 gcc -L/custom/lib/dir/ -I/custom/include/dir/ -lstuff
을 사용합니다.
컴파일을 시도하면 stuff.h
에 선언 된 함수에 대해 오류가 발생하고 stuff.c
에 정의됩니다. 내가 /custom/lib/dir/
에서 libstuff.a
를 제거하면
main.c:51: undefined reference to `stuff_init'
collect2: error: ld returned 1 exit status
컴파일러는 /usr/bin/ld: cannot find -lstuff
를 뿌려줍니다. 내가 다시 돌려 놓으면 불평을하지 않는다. 따라서 아카이브를 올바르게 찾는 것입니다.
main.c
gcc에서 #include "stuff.h"
코드를 제거하면 약 stuff_init
이라는 메시지가 표시되어 헤더가 올바르게 검색됩니다.
nm libstuff.a
을 실행하면 출력은 0000000000000000 T stuff_init
입니다. 따라서 함수는 아카이브 파일에 정의됩니다.
그래서 내가 뭘 잘못하고 있니?
공유 라이브러리는'àr (1)'로 생성되지 않고'libfoo.a'는 * 정적 * 라이브러리입니다. 빌드 지침을 확인하십시오. – vonbrand
죄송합니다. 공유 대신 정적으로 말하려고합니다. 감사합니다 :) – Josh
당신은 정말로 정확하고 완전한 연결 명령 줄을 보여 주어야합니다. "기본적으로"괜찮지 만 충분히 구체적인 것은 아닙니다. –