programing

arm-linux-gnueabi-gcc를 사용하는 안드로이드용 정적 Chello world 교차 컴파일

topblog 2023. 10. 15. 16:56
반응형

arm-linux-gnueabi-gcc를 사용하는 안드로이드용 정적 Chello world 교차 컴파일

저는 해당 사항에 대해 NDK 독립형 툴체인이나 코드 소스를 사용하는 것이 아니라 arm-linux-gnueabi-gcc를 사용하여 C에서 정적 헬로 월드를 구축하고 싶습니다.

Ubuntu에서...

저는 다음과 같은 일을 했습니다.

sudo apt-get install gcc-arm-linux-gnueabi

이렇게 하이씨를 만들었어요

#include <stdio.h>

int main(int argc, char** argv) {
   printf("hello world\n");
   return 0;
}

다음과 같이 정리했습니다.

arm-linux-gnueabi-gcc -static hi.c -o hi 

이런 에뮬레이터로 작동시켰습니다.

adb push hi /data/hi
adb shell /data/hi

하지만 이해가 갑니다

[1]   Illegal instruction     /data/hi

제가 어떤 단계를 잊었나요?과거 경험으로 볼 때 이 "일"이 효과가 있었어야 했지만, 제가 분명히 이 일을 망쳤어요.

아키텍처/cpu를 지정해 봅니다.컴파일러가 에뮬레이터가 처리할 수 있는 것보다 더 높은 아키텍처 버전으로 코드를 생성하는 것처럼 들립니다.

작동할 수 있습니다.

arm-linux-gnueabi-gcc -static -march=armv5 hi.c -o hi

우분투 데스크톱에서 코드벤치 컴파일러로 작동했습니다.https://sourcery.mentor.com/sgpp/lite/arm/portal/release2029

다음 명령을 사용하여 정적 이진을 만듭니다.

arm-none-linux-gnueabi-gcc -o hello -static hello.c

전화기로 밀어 넣습니다.

adb push hello /data/local/tmp

가서 실행해 보세요.

adb shell
$ chmod 755 /data/local/tmp/hello
$ /data/local/tmp/hello

단말기에 Hello World가 인쇄됩니다.전화로도 할 수 있습니다.터미널 에뮬레이터 또는 SL4A 배시 셸을 사용하여 실행합니다.

데비안 머신(내 경우에는 VM)에서 이 작업을 수행하면 모든 것이 잘 된 것 같습니다.우분투에서 비슷한 작업을 하는 것이 무엇이 잘못되었는지 잘 모르겠습니다.레오가 제안한 대로일 수도 있지만 확인할 수 없습니다.그래도 이 방법이 당신에게 효과가 있을 겁니다.

http://www.cnx-software.com/2012/01/16/installing-emdebian-arm-cross-toolchain-in-debian/

누군가 이 링크를 추가했지만 설명에서 언급한 툴체인을 사용하지 않고 있습니다.관심 있는 사람이 있을 때를 대비해 놔두는 것.

http://tariqzubairy.wordpress.com/2012/03/09/arm-binaries-static-library-for-android/

안드로이드 내에서는 gcc-arm-linux-androideabi 형태로 컴파일되지 않은 사용자-랜드 애플리케이션을 실행할 수 없는 것으로 알고 있습니다.

당신의 코드는 저에게 효과가 있습니다.

Ubuntu에서 컴파일하여 /data/local/tmp로 푸시했습니다.

그리고 chmod 777 안녕.

마지막으로 잘 작동합니다.

데이터 폴더의 권한을 확인했습니까?대신 local을 사용해 보세요! 그냥 adb shell을 사용한 다음 cd를 실행 파일이 푸시된 폴더에 넣고 ./hi를 시도하면 됩니다.이건 그냥 권한 문제인 것 같습니다.

언급URL : https://stackoverflow.com/questions/9324772/cross-compiling-static-c-hello-world-for-android-using-arm-linux-gnueabi-gcc

반응형