공유 라이브러리를 작성하고 링크를 시도하여 최종 실행 파일을 만들려고했습니다. 다음은 메이크Makefile 공유 라이브러리와 연결에 실패했습니다.
mystring.out:main.c libmystring.so
gcc -I. -L/home/pradheep/myexploration/mystring/ -lmystring main.c -o mystring.out
libmystring.so:mystring.o
gcc -shared -Wl,-soname,libmystring.so -o libmystring.so mystring.o
libmystring.a:mystring.o
ar -r libmystring.a mystring.o
mystring.o:mystring.h mystring.c
gcc -Wall -g -c -fPIC -I. mystring.c
clean:
rm *.o
rm *.a
rm *.so
rm *.out
는 오류 메시지입니다 :
gcc -I. -L/home/pradheep/myexploration/mystring/ -lmystring main.c -o mystring.out
/tmp/ccS9UDPS.o: In function `main':
main.c:(.text+0x2d): undefined reference to `mystrcpy'
main.c:(.text+0x5a): undefined reference to `mystrncpy'
main.c:(.text+0x87): undefined reference to `mystrncpy'
main.c:(.text+0xa4): undefined reference to `mystrlen'
collect2: ld returned 1 exit status
make: *** [mystring.out] Error 1
나는 이미 내 libmystring.so의 LD_LIBRARY_PATH
echo $LD_LIBRARY_PATH
/home/pradheep/myexploration/mystring
출력을 내 보낸
000004ca T mystrncpy
0000045c T mystrcpy
내가 무엇이 누락 되었습니까?
해결책 :
문제는 라이브러리 -l 사용 순서입니다. 이 파일은 소스 파일 다음에 사용해야하며 Dayal rai가 가리키는 올바른 순서는 gcc -I입니다. -L/home/pradheep/myexploration/mystring/main.c -lmystring -o mystring.out 그리고 그것이 작동합니다.
mystring.h를 main.c 파일에 포함 시켰습니까? – Omkant
예. 내가 추가했습니다 ... 같은 사실은 명령 줄에서 작동합니다. – Pradheep
@Omkant 헤더 파일은 링커 오류와 아무 관련이 없습니다. 중요한 것은'-lmystring' 링커 플래그의 위치입니다. –