2012-05-02 2 views
4

ndk 용 애플리케이션을 컴파일하고 있는데 "정의되지 않은 참조가 '__errno_location'"이됩니다. " 내가이 줄을 언급하는 경우, 링커가 않습니다, 그렇지 않으면 같은 불평하지 않습니다'__errno_location'에 대한 정의되지 않은 참조

sprintf(buff, "%s TIOCMGET failed: %s\n", buff, strerror(errno)); 

오류는 라인에서 온다.

Sourcery G ++ Lite의 arm-none-linux-gnueabi-gcc 툴 체인을 사용하여 안드로이드 용 실행 파일을 직접 만들려고합니다.

답변

5

내가 수집 할 수있는 컴파일러에서 심볼 __errno_location을 참조하고 있는데 링커가보고있는 라이브러리에서는 찾을 수 없습니다.

  1. 당신은 올바른 라이브러리를 필요는 없습니다 :

    이 중 하나를 제안 또는

  2. 올바른 라이브러리가 있지만 링커에 제공되지 않습니다. 또는
  3. 올바른 헤더가 없습니다.

헤더가 라이브러리와 일치하지 않으면 기호의 이름이 잘못되어 링크 오류가 발생할 수 있습니다.

당신은 컴파일러의 LibC 헤더를 포함하고 있으며, 항상 작동하지 않을지도 모르는 안드로이드 라이브러리와 연결되어있는 것처럼 보입니다.

+0

흠 ... 다음은 제 컴파일 단계입니다 :'arm-none-linux-gnueabi-gcc -I \ Apps \ Android \ GT-I9100G_OpenSource \ kernel \ include -I "\ Apps \ CodeSourcery \ Sourcery G ++ Lite \ arm -none-linux-gnueabi \ libc \ usr \ include "-c hello.c -o hello.o arm-none-linux-gnueabi-ld --entry = _start --dynamic-linker/system/bin/linker -nostdlib -lpath/system/lib -rpath-link \ apps \ android \ system \ lib -L \ apps \ android \ system-lib -lc -l android_runtime -l sqlite -o hellodynamic2 hello.o crt0.o' 여기에 실수가 있습니까? –

+1

G ++ LibC의 헤더가 포함되어 있지만 Android LibC와 연결되어있는 것 같습니다. Android 플랫폼의 LibC 헤더를 포함 시키십시오. – Nick

+0

android 플랫폼, 커널 소스 또는 NDK를 의미합니까? –

관련 문제