2013-09-21 2 views
0

모든 프로그래밍 예제를 수행하면서 헤드 퍼스트 C를 실행 중입니다. 8 장은 정적 링크로 시작합니다.컴퓨터가이 경우 정적 또는 동적 연결을 사용할지 여부를 어떻게 알 수 있습니까?

gcc -I./includes -c hfcal.c -o hfcal.o 
gcc -I./includes -c elliptical.c -o elliptical.o 
ar -rcs ./libs/libhfcal.a hfcal.o 
gcc elliptical.o -L./libs -lhfcal -o elliptical 

내가 제대로 그 입력 된 가정은 타원형 기계에 칼로리를 보여주는 몇 줄을 출력한다 : 우리는이 네 개의 명령 (Cygwin에서)를 사용합니다.

다음은 동적 연결을 소개합니다. 이 책에서 가장 명확한 장이 아니며 필자는 여전히 약간 애매합니다. 새로운 코드에 오타가 있는지 없는지는 모르겠다는 것입니다. 텍스트는 코드가 이전과 동일하지만 슬래시 앞에 점을 찍지 않으며 포함의 끝 부분에있는 경우에도 한 번에 끝납니다. 나는 그 점을 되돌려 놓고 변경해야 할 부분 만 변경했다. (나는 그들의 정오표 페이지에 가서 관련 아무것도 보지 않았다.) 여기에 새로운 코드의 다음 무시 된 -fPIC과 두 번째 줄을 제외하고,이 첫 번째 경우와 동일한 명령이 약간에 있음을

gcc -I./includes -fPIC -c hfcal.c -o hfcal.o //Got a warning, fPIC ignored, as book predicted 
gcc -shared hfcal.o -o ./libs/libhfcal.dll 
gcc -I./includes -c elliptical.c -o elliptical.o 
gcc elliptical.o -L./libs -lhfcal -o elliptical 

공지 사항

다른 순서.

성공적으로 ./elliptical을 실행 한 후에 실제로 다른 디렉토리를 사용했는지, 그리고 누락 된 점이 의도적인지를 궁금해했습니다. 나는 아카이브 .a 파일을 rm'd하지 않았고 새로운 dll 파일과 같은 디렉토리에 있었다. 컴파일러는 libhfcal.a 또는 libhfcal.dll 중 어느 것을 사용할지 여부를 어떻게 알 수 있습니까? 주문 때문인가요?

내가 할 수있는 코드가있는 명확한 설명을 읽을 수있는 좋은 자료가 있습니까?

+0

나는 우리가 필요성을 잃고 표준 디렉토리를 사용하기로했다 다음 연습, 문제를 많이했다 - 나는. tho 나는 Cygwin을위한 지시를 따랐다, hfcal.h 파일을위한 그런 파일 또는 전화 번호부를 계속 말하고 있었다. 그런 다음 .h 파일로 가득 찬 include라는 폴더를 발견하여 거기에 복사하고 컴파일했습니다. 어쩌면 누락 된 점은 오류가 아니지만 잘 설명되지 않았을 수 있습니까? 나는 그 책이 말했던 것을 알아내는 데 시간을 낭비하는 것을 싫어한다 !!! – punstress

답변

0

도트가 부족하고 은 오타라고 생각합니다. 그렇지 않다면을 포함하는 을 포함하는 디렉토리가 시스템의 루트에 있어야하며 필요한 헤더 파일이 있어야합니다.

내가 알 수있는 한 책의 다른 곳에서 지정되지 않았으므로별로 의미가 없습니다.

하지만 연결 동적을하려고 할 때 ./libs/libhfcal.a 당신이 정적 링크의 경우에 생성 된 아카이브를 삭제에서 세 번째 줄을 변경해야한다고 생각 :

gcc -shared hfcal.o -o ./libs/libhfcal.dll

에 :

gcc -shared hfcal.o -o ./libs/libhfcal.dll.a