2011-02-28 2 views
1

안녕 얘들 아. 현재 제가하려고하는 것은 DigSig에 대한 몇 가지 중요한 암호화 기능이없는 것으로 보이는 CentOS-Kernel에 DigSig 도구를 이식하는 것입니다. 내가 일하고 있어요 내 커널이되지 않기 때문에커널 파일의 여러 함수 정의 오류

void kzfree(const void *p) { 
    size_t ks; 
    void *mem = (void *)p; 

    if (unlikely(ZONP(mem))) 
      return; 
    ks = ksize(mem); 
    memset(mem, 0, ks); 
    kfree(mem); 

}

: 그래서 포트 플러스 내가 필요로하는 기능이 있습니다이 난 단지 새로운 /linux/crypto.h 나는이 작은 코드를 추가 아직 kzfree있다. 모두 ifndef가 가드 번호로 덮여있다, 그래서 그는이 기능을 여러 번 정의하는 이유는 이해할 수 없다, 물론

/home/Chris/dsTest/dsi_sysfs.o: In function `kzfree': 
/usr/src/kernels/2.6.18-194.32.1.el5-i686/include/linux/crypto.h:114: multiple definition of `kzfree' 
/home/Chris/dsTest/digsig.o:/usr/src/kernels/2.6.18-194.32.1.el5-i686/include/linux/crypto.h:114: first defined here 
/home/Chris/dsTest/digsig_cache.o: In function `kzfree': 
/usr/src/kernels/2.6.18-194.32.1.el5-i686/include/linux/crypto.h:114: multiple definition of `kzfree' 
/home/Chris/dsTest/digsig.o:/usr/src/kernels/2.6.18-194.32.1.el5-i686/include/linux/crypto.h:114: first defined here 
/home/Chris/dsTest/digsig_revocation.o: In function `kzfree': 
/usr/src/kernels/2.6.18-194.32.1.el5-i686/include/linux/crypto.h:114: multiple definition of `kzfree' 
/home/Chris/dsTest/digsig.o:/usr/src/kernels/2.6.18-194.32.1.el5-i686/include/linux/crypto.h:114: first defined here 
/home/Chris/dsTest/dsi_sig_verify.o: In function `kzfree': 
/usr/src/kernels/2.6.18-194.32.1.el5-i686/include/linux/crypto.h:114: multiple definition of `kzfree' 
/home/Chris/dsTest/digsig.o:/usr/src/kernels/2.6.18-194.32.1.el5-i686/include/linux/crypto.h:114: first defined here 

... : 나는 DigSig를 컴파일 할 때 지금, 이것은 출력 아이디어가 있으십니까?

+0

전체 프로그램을 붙여 넣을 수 있습니까? – sunmoon

답변

1

포함 파일이 여러 위치에 포함됩니다. 이것은 컴파일 시간 오류가 아닙니다. 그러나 오히려 연결된 시간 오류. 파일의 각 컴파일 및 생산 .o 인 파일

/home/Chris/dsTest/dsi_sysfs.o 
/home/Chris/dsTest/digsig_cache.o 
/home/Chris/dsTest/digsig_revocation.o 
/home/Chris/dsTest/dsi_sig_verify.o 

다음 지금을 연결하면서 해당 C 파일이

/usr/src/kernels/2.6.18-194.32.1.el5-i686/include/linux/crypto.h 
을 포함하기 때문에 함께 위 .o 인 파일에 하나의 각을 kzfreez의 여러 정의가 발견되었다

ifdef는 파일을 보호하지만 .c 파일을 다른 c 파일이 아닌 동일한 c 파일 (번역 단위)에 포함하는 것을 방지합니다.

c 파일에 함수를 작성하고 make 파일에 추가하여 별도로 컴파일되고 링크되도록해야합니다. crypto.h에 선언 만 추가하십시오. 테스트를 위해 crypto.c에 정의를 추가하고 crypto.h에 선언을 추가 할 수 있습니다.