2014-11-03 2 views
0

CentOS 버전 4.3에서 다음 C 코드를 컴파일하는 동안 오류가 발생합니다. 컴파일 오류의'htole32'에 대한 정의되지 않은 참조

#include <endian.h> 
#include <stdint.h> 
#include <stdio.h> 
#include <stdlib.h> 
int main(int argc, char *argv[]) 
{ 
    union { 
     uint32_t u32; 
     uint8_t arr[4]; 
    } x; 

    x.arr[0] = 0x11; 
    x.arr[1] = 0x22; 
    x.arr[2] = 0x33; 
    x.arr[3] = 0x44; 

    printf("x.u32 = 0x%x\n", x.u32); 
    printf("htole32(x.u32) = 0x%x\n", htole32(x.u32)); 
    printf("htobe32(x.u32) = 0x%x\n", htobe32(x.u32)); 

    exit(EXIT_SUCCESS); 
} 

세부 사항 :

$ gcc가 교류 /tmp/ccki8bVg.o(.text+0x3a) : /tmp/ccki8bVg.o(.text+0x58 '기능 main': : undefined reference to htole32에서)에서 기능 main': : undefined reference to htobe32 'collect2 : ld는 내 서버에없는 htole32 및 htobe32이 것 같습니다 1 종료 상태

를 반환했습니다.

$ 사람은 실제로 htole32

+0

IDE에서 포함 및 라이브러리 플래그 (또는 명령 행 컴파일러 플래그)를 확인하십시오. 이것은 단순히 컴파일이 함수가 참조하는 includes/sources/libraries를 찾을 수 없다는 것을 의미합니다. 서버의 위치가 잘못되었거나 경로 이름에 오타가있을 수 있습니다. 적어도, 1) 플래그가있는 명령 행 빌드 명령문 또는 2) 코드 스 니펫에 포함, 소스 및 라이브러리에 대한 IDE 구성을 넣으십시오. – ha9u63ar

답변

1

The manual page에 대한 없음 수동 입력을 htole32 있습니다

#define _BSD_SOURCE 

#include <endian.h> 전에. 그것은 단지 아래의 예제 프로그램에서는 아니지만 맨 위 섹션에 있습니다. 물론, 타겟 시스템에 매뉴얼 페이지조차 없기 때문에 이것은 (비표준) 부분을 구현하지 않는 런타임 환경을 가지고 있음을 암시 할 수 있습니다.

+0

알았습니다! 이 함수들은 2.9 버전에서 glibc에 추가되었고, 2.3 버전은 2.3 버전입니다. – qiaoba

관련 문제