기존 이솝 임베디드 포럼의 지식인 서비스가 게시판 형태로 변경되었습니다.

안녕하세요. 아래 문제로 몇일째 고민을 하다가 여기까지 오게 되었습니다.ㅜㅜ


어플을 작성할때 libsctp.so 파일에 있는 관련 함수들을 사용해야 하는데.

문제는 android platform 에 맞게 컴파일된 libsctp.so 파일이 없다는 것입니다.


처음 리눅스 머신에서 테스트 할때는 잘 동작을 했기에,

당연히 android 에서도 동작을 할 줄 알았는데 ndk-build 할때 계속해서 아래의 에러가 나는 겁니다.


libsctp.so: file not recognized: File format not recognized

collect2: ld returned 1 exit status


몇일동안 구글링해보니, 다른 bit 의 system 에서 작성되어 문제가 생기는 것 같습니다.

즉 ndk-build 할때는 32bit 로 컴파일된 .so 파일이 필요한데

저 파일은 64bit 로 컴파일이 되어 있어서 문제가 발생한게 아닌가 예상이 됩니다.


그리고 만약 32bit system 에서 저 파일을 만들어 사용을하면 문제가 없을까요?

두서없이 글을 적어서 죄송합니다.. 조언 부탁드립니다.ㅜㅜ






쭈암

2012.08.23 08:12:04
*.186.87.8

libstcp.so가 pc용인듯 하네요.

안드로이드용으로 빌드하세요.


쭈암

2012.08.23 08:15:23
*.186.87.8

먼가 커널까지 건드려야 하는 물건으로 보이네요.

해당 라이브러리가 안드로이드에서 돌아는 가는 물건인기요?

루트 아니면 못쓰는 물건 아닌가요?

민경욱

2012.08.23 08:53:57
*.94.41.89

libsctp.so 는 PC 용 입니다. 쭈암님 말씀대로 안드로이드용으로 빌드를 하고 싶은데요.

저건 lksctp 라는 커널 라이브러리를 install 하면 생성이 되는데.  저걸 어떻게 안드로이드용으로 빌드할지 막막하네요.. ㅜㅜ

쾌도난마

2012.08.23 09:23:24
*.100.224.245

말씀하신데로 안드로이드용 라이브러리를 만드셔야 할 것 같습니다.

external/* 하위에 있는 녀석들을 참고 하시면 될 것 같네요.

libsctp.so 오픈 소스를 구하셔서

external/* 밑에 복사 하여 Android.mk make 문법을 이해하고 만드셔서

전체 빌드하시는 겁니다~

문제는 만약 libsctp 가 external/* 에 없는 다른 라이브러리의 함수를 호출하면

관련된 모든 라이브러리를 Android 용으로 만드셔야 합니다..


저도 예전에 한 프로그램을 실행하기 위해서 위와 같은 경험을 한 적이 있습니다.

한번 참고해 보세요 ^^;

http://furmuwon.egloos.com/10709926

고도리

2012.08.23 09:56:24
*.200.239.210

1. 현재 올리신 것은 아마도 x86용 라이브러리 일 듯 하고요.

2. 일단 http://lksctp.sourceforge.net/ 요기 가셔서 lksctp-tools-1.0.11.tar.gz 다운로드 하신 후

3. configure 스크립트를 이용해서 arm용으로 Makefile을 만드신 후 컴파일을 함 해봅니다.


4. 컴파일 하면서 컴팔 로그를 dump 뜨신 후

5. 컴파일이 잘 되면


6. 해당 디렉토리를 android 소스의 external 디렉토리로 옮기시고

7. 덤프뜬 로그를 보면서 필요한 file들의 리수투를 만듭니다(list)


8. 로그를 욜라 잘 보면서..........file list들과 include 디렉토리들을 다 정리하신 후


9. Android.mk 파일을 만드시면 됩니다.

이 부분은 인터넷 찾으면 엄청 나오니, 제가 example을 드리는 것은 지금 제 상태............메롱......된 상태로는 불가능합니다....ㅠ.ㅠ


10. 컴팔 해 봅니다.

안드로이드에서 mm 명령을 이용해서요....

자세한 문서는 요길 참조......

http://www.aesop.or.kr/Board_Documents_Android_Frameworks/70831


11. 에러가 나면 일일이 조집니다.....^^

가끔, bionic C library와 glibc 혹은 커널 버전 등에 따라 안되는 경우가 있습니다.


12. 잘되면 이제 제대로 테스트를 해 봅니다.

안될 경우도 있습니다. 이유는 bionic C가 좀 부실할 경우도 있어서 잘 동작 안하는 경우도 있습니다.

즉, 함수 이름은 있으나 내용이........휑......


if( 안될경우)

{

         x86과 동작을 비교하면서 하나씩 조지러 들어가야 합니다.....

}

else

{

         잘 되었으므로.........그냥 쓴다......

         ret = delay(2days); // 윗분들한테는 보고하지 않고, 고생하는 것 처럼 하고 2일 잉여짓을 많이 한다.

         if( ret == 0 )

         {

                  printf("okay\n");

         }

         else

              goto YingYeo_Fail; 

}


return 0;


YingYeo_Fail:

         욜라_욕_먹는다();

         printf("그래도 일은 끝냈다\n);


return 0;

고도리

2012.08.23 09:58:34
*.200.239.210

쾌도난마님 글과 제 글의 순서를 비교해 가면서 하시면 금방하실겁니다......

민경욱

2012.08.23 19:54:41
*.94.41.89

소중한 댓글 정말 감사드립니다.  고도리님과 쾌도난마님의 조언대로 작성해 보겠습니다.

감사합니다.^^

고도리

2012.08.23 20:03:57
*.200.239.210

어제는 메롱이라 못해봤고, 오늘 해 봤는데...

./configure --help
해서 옵션을 확인해 보시고요.

./configure --build=i386-linux --host=arm-insignal-linux-gnueabi

이렇게 하신 후 

make 하시면 될겁니다...........잘 되네요...^^
툴체인은 제가 만든 회사용 툴체인이라 좀 애매하긴 하겠지만, 툴체인 암거나 해 보시기 바랍니다.

혹시 안되면 제 툴체인을 올려드리도록 하겠습니다.

고도리

2012.08.23 20:15:51
*.200.239.210

민경욱

2012.08.23 23:13:33
*.94.41.89

고도리님 정말 정말 감사합니다. 지금 툴체인 받고 있는데 작업이 끝나면 다시 답글 달겠습니다.

감사드립니다.^^

민경욱

2012.08.24 04:13:43
*.94.41.89

올려주신 툴체인으로 lksctp.so 를 arm 용으로 만들어서 정상적으로 빌드까지 마쳤습니다.

여기까지 한것만으로도 정말 감사드립니다.(쾌도난마님, 고도리님)

 

그런데 실제 단말에서 실행될때 아래와 같은 에러가 발생하네요..

java.lang.UnsatisfiedLinkError: Cannot load library: link_image[1937]: 1908 could not load needed library 'libc.so.6' for 'libsctp.so'

 

아무래도 위에 쾌도난마님께서 말씀하신데로 libsctp.so 에서 호출하는 모든 라이브러리들을 android 용으로 작성해서 올려야 할 것 같은데 맞나요?

 

그래서 아래 명령어로 확인해보니

#arm-insignal-linux-gnueabi-objdump -p libsctp.so | grep NEEDED

NEEDED    libc.so.6

밖에 없네요.

하~ 위 라이브러리만 있으면 될 것 같은데.. libc.so.6 은 어떻게 안드로이드 용으로 작성할 수 있을까요?

 

계속 질문드려서 죄송합니다..

고도리

2012.08.24 05:10:07
*.127.19.87

일단, 제가 말씀드린 5번까지 된 것입니다.


지금서부터는 컴파일 정보를 재 구성해야할 때입니다.

즉, 안드로이드에서는 다른 libc를 쓰기 때문에, Android에 맞게 컴파일을 안드로이드 소스를 이용해서 하셔야 합니다.


여기서 결정해야할 것이...


1. static library를 만들것이냐?

2. shared library를 만들것이냐?


를 결정한 후에 


http://www.aesop.or.kr/Board_Documents_Android_Frameworks/70831


자료의 24 page서부터의 자료를 참고로, 인터넷서 Android.mk에 대한 자료를 얻으셔야 합니다.

그 후에 Android.mk를 sctp library를 만들기 위하여 작성을 해 주신 후 android에서 컴팔하셔야 합니다.


지금까지 올려주신 자료로는 정확하게


1. android 어느버전?

2. 그냥 컴팔만?


등등의 의문점이 있습니다. 즉, 타겟 환경이 제대로 갖춰져 있지 않으면 더 설명드리는 것은 힘들다고 보여집니다.


제가 해 드리고 싶긴하지만, 

안드로이드 컴파일 하려면 집 pc로는 24시간 정도가 걸릴 듯 하고(저번에 실제로 그랬음....ㅠ.ㅠ - vbox이용하니)


회사서 하기에도 대략 2시간 이상 정도가 걸릴 듯 합니다.


Android.mk를 만드시는 부분은 직접 어느정도 인터넷 자료를 가지고 만드셔야 할 듯 합니다.

Linux정도라면 그나마 쉽게 확인이 가능한데, 안드로이드는 머 하나 하려면 너~~~무 오래 걸립니다.... ㅠ.ㅠ


여하튼 libc.so.6는 안드로이드용으로 현재 라이브러라 만들어지지 않기 때문에 나오는 메세지고요.

안드로이드용으로 Android.mk 파일을 만드셔서, 안드로이드의 /external 디렉토리 밑에서 작업하시면 큰 문제없이 라이브러리가 생성될겁니다.


Android.mk 문법을 익히시고, 지금 라이브러리를 만들 때 사용된 source file list만 잘 나열해 주시면 금방 될겁니다.

민경욱

2012.08.24 08:57:35
*.94.41.89

make -C ../../src/lib libsctp.la
make[4]: Entering directory `/home/minlab/lksctp/lksctp-tools-1.0.11/src/lib'
if /bin/bash ../../libtool --tag=CC --mode=compile arm-insignal-linux-gnueabi-gcc -DHAVE_CONFIG_H -I. -I. -I../.. -I../../src/include    -g -O2 -MT bindx.lo -MD -MP -MF ".deps/bindx.Tpo" -c -o bindx.lo bindx.c; \
    then mv -f ".deps/bindx.Tpo" ".deps/bindx.Plo"; else rm -f ".deps/bindx.Tpo"; exit 1; fi
libtool: compile:  arm-insignal-linux-gnueabi-gcc -DHAVE_CONFIG_H -I. -I. -I../.. -I../../src/include -g -O2 -MT bindx.lo -MD -MP -MF .deps/bindx.Tpo -c bindx.c  -fPIC -DPIC -o .libs/bindx.o
libtool: compile:  arm-insignal-linux-gnueabi-gcc -DHAVE_CONFIG_H -I. -I. -I../.. -I../../src/include -g -O2 -MT bindx.lo -MD -MP -MF .deps/bindx.Tpo -c bindx.c -o bindx.o >/dev/null 2>&1
if /bin/bash ../../libtool --tag=CC --mode=compile arm-insignal-linux-gnueabi-gcc -DHAVE_CONFIG_H -I. -I. -I../.. -I../../src/include    -g -O2 -MT connectx.lo -MD -MP -MF ".deps/connectx.Tpo" -c -o connectx.lo connectx.c; \
    then mv -f ".deps/connectx.Tpo" ".deps/connectx.Plo"; else rm -f ".deps/connectx.Tpo"; exit 1; fi
libtool: compile:  arm-insignal-linux-gnueabi-gcc -DHAVE_CONFIG_H -I. -I. -I../.. -I../../src/include -g -O2 -MT connectx.lo -MD -MP -MF .deps/connectx.Tpo -c connectx.c  -fPIC -DPIC -o .libs/connectx.o
libtool: compile:  arm-insignal-linux-gnueabi-gcc -DHAVE_CONFIG_H -I. -I. -I../.. -I../../src/include -g -O2 -MT connectx.lo -MD -MP -MF .deps/connectx.Tpo -c connectx.c -o connectx.o >/dev/null 2>&1
if /bin/bash ../../libtool --tag=CC --mode=compile arm-insignal-linux-gnueabi-gcc -DHAVE_CONFIG_H -I. -I. -I../.. -I../../src/include    -g -O2 -MT peeloff.lo -MD -MP -MF ".deps/peeloff.Tpo" -c -o peeloff.lo peeloff.c; \
    then mv -f ".deps/peeloff.Tpo" ".deps/peeloff.Plo"; else rm -f ".deps/peeloff.Tpo"; exit 1; fi
libtool: compile:  arm-insignal-linux-gnueabi-gcc -DHAVE_CONFIG_H -I. -I. -I../.. -I../../src/include -g -O2 -MT peeloff.lo -MD -MP -MF .deps/peeloff.Tpo -c peeloff.c  -fPIC -DPIC -o .libs/peeloff.o
libtool: compile:  arm-insignal-linux-gnueabi-gcc -DHAVE_CONFIG_H -I. -I. -I../.. -I../../src/include -g -O2 -MT peeloff.lo -MD -MP -MF .deps/peeloff.Tpo -c peeloff.c -o peeloff.o >/dev/null 2>&1
if /bin/bash ../../libtool --tag=CC --mode=compile arm-insignal-linux-gnueabi-gcc -DHAVE_CONFIG_H -I. -I. -I../.. -I../../src/include    -g -O2 -MT opt_info.lo -MD -MP -MF ".deps/opt_info.Tpo" -c -o opt_info.lo opt_info.c; \
    then mv -f ".deps/opt_info.Tpo" ".deps/opt_info.Plo"; else rm -f ".deps/opt_info.Tpo"; exit 1; fi
libtool: compile:  arm-insignal-linux-gnueabi-gcc -DHAVE_CONFIG_H -I. -I. -I../.. -I../../src/include -g -O2 -MT opt_info.lo -MD -MP -MF .deps/opt_info.Tpo -c opt_info.c  -fPIC -DPIC -o .libs/opt_info.o
libtool: compile:  arm-insignal-linux-gnueabi-gcc -DHAVE_CONFIG_H -I. -I. -I../.. -I../../src/include -g -O2 -MT opt_info.lo -MD -MP -MF .deps/opt_info.Tpo -c opt_info.c -o opt_info.o >/dev/null 2>&1
if /bin/bash ../../libtool --tag=CC --mode=compile arm-insignal-linux-gnueabi-gcc -DHAVE_CONFIG_H -I. -I. -I../.. -I../../src/include    -g -O2 -MT addrs.lo -MD -MP -MF ".deps/addrs.Tpo" -c -o addrs.lo addrs.c; \
    then mv -f ".deps/addrs.Tpo" ".deps/addrs.Plo"; else rm -f ".deps/addrs.Tpo"; exit 1; fi
libtool: compile:  arm-insignal-linux-gnueabi-gcc -DHAVE_CONFIG_H -I. -I. -I../.. -I../../src/include -g -O2 -MT addrs.lo -MD -MP -MF .deps/addrs.Tpo -c addrs.c  -fPIC -DPIC -o .libs/addrs.o
libtool: compile:  arm-insignal-linux-gnueabi-gcc -DHAVE_CONFIG_H -I. -I. -I../.. -I../../src/include -g -O2 -MT addrs.lo -MD -MP -MF .deps/addrs.Tpo -c addrs.c -o addrs.o >/dev/null 2>&1
if /bin/bash ../../libtool --tag=CC --mode=compile arm-insignal-linux-gnueabi-gcc -DHAVE_CONFIG_H -I. -I. -I../.. -I../../src/include    -g -O2 -MT sendmsg.lo -MD -MP -MF ".deps/sendmsg.Tpo" -c -o sendmsg.lo sendmsg.c; \
    then mv -f ".deps/sendmsg.Tpo" ".deps/sendmsg.Plo"; else rm -f ".deps/sendmsg.Tpo"; exit 1; fi
libtool: compile:  arm-insignal-linux-gnueabi-gcc -DHAVE_CONFIG_H -I. -I. -I../.. -I../../src/include -g -O2 -MT sendmsg.lo -MD -MP -MF .deps/sendmsg.Tpo -c sendmsg.c  -fPIC -DPIC -o .libs/sendmsg.o
libtool: compile:  arm-insignal-linux-gnueabi-gcc -DHAVE_CONFIG_H -I. -I. -I../.. -I../../src/include -g -O2 -MT sendmsg.lo -MD -MP -MF .deps/sendmsg.Tpo -c sendmsg.c -o sendmsg.o >/dev/null 2>&1
if /bin/bash ../../libtool --tag=CC --mode=compile arm-insignal-linux-gnueabi-gcc -DHAVE_CONFIG_H -I. -I. -I../.. -I../../src/include    -g -O2 -MT recvmsg.lo -MD -MP -MF ".deps/recvmsg.Tpo" -c -o recvmsg.lo recvmsg.c; \
    then mv -f ".deps/recvmsg.Tpo" ".deps/recvmsg.Plo"; else rm -f ".deps/recvmsg.Tpo"; exit 1; fi
libtool: compile:  arm-insignal-linux-gnueabi-gcc -DHAVE_CONFIG_H -I. -I. -I../.. -I../../src/include -g -O2 -MT recvmsg.lo -MD -MP -MF .deps/recvmsg.Tpo -c recvmsg.c  -fPIC -DPIC -o .libs/recvmsg.o
libtool: compile:  arm-insignal-linux-gnueabi-gcc -DHAVE_CONFIG_H -I. -I. -I../.. -I../../src/include -g -O2 -MT recvmsg.lo -MD -MP -MF .deps/recvmsg.Tpo -c recvmsg.c -o recvmsg.o >/dev/null 2>&1
/bin/bash ../../libtool --tag=CC --mode=link arm-insignal-linux-gnueabi-gcc  -g -O2   -o libsctp.la -rpath /usr/local/lib -version-info 1:11:0 -Wl,--version-script=./Versions.map bindx.lo connectx.lo peeloff.lo opt_info.lo addrs.lo sendmsg.lo recvmsg.lo 
libtool: link: arm-insignal-linux-gnueabi-gcc -shared  .libs/bindx.o .libs/connectx.o .libs/peeloff.o .libs/opt_info.o .libs/addrs.o .libs/sendmsg.o .libs/recvmsg.o    -Wl,--version-script=./Versions.map   -Wl,-soname -Wl,libsctp.so.1 -o .libs/libsctp.so.1.0.11
libtool: link: (cd ".libs" && rm -f "libsctp.so.1" && ln -s "libsctp.so.1.0.11" "libsctp.so.1")
libtool: link: (cd ".libs" && rm -f "libsctp.so" && ln -s "libsctp.so.1.0.11" "libsctp.so")
libtool: link: arm-insignal-linux-gnueabi-ar cru .libs/libsctp.a  bindx.o connectx.o peeloff.o opt_info.o addrs.o sendmsg.o recvmsg.o
libtool: link: arm-insignal-linux-gnueabi-ranlib .libs/libsctp.a
libtool: link: ( cd ".libs" && rm -f "libsctp.la" && ln -s "../libsctp.la" "libsctp.la" )
make[4]: Leaving directory `/home/minlab/lksctp/lksctp-tools-1.0.11/src/lib'

민경욱

2012.08.24 09:06:56
*.94.41.89

고도리님 댓글 달아주셔서 감사드립니다. 지금 윗쪽에 달린 댓글을 몇번이고 읽었습니다. 그리고

이제야 조금씩 감을 잡기 시작했습니다.^^

일단 저의 개발환경은 ubuntu 10.04 에서 Android ICS 4.0.3 소스를 기준으로 개발을 하고 있습니다.

 

말씀해주신대로 lksctp make 시에 로그를 떴구요, 거기서 libsctp.so 를 생성하는 부분만 위에 붙여봤습니다. 계속 보고 있어도 아리송 아리송하네요; 이제 저걸 기준으로 android.mk 를 만들어서 extern/ 밑에 필요 파일들과 함께 넣어서 안드로이드 풀 빌드를 돌리면 제가 필요로 하는 lksctp.so 파일이 생성 될 것 같은데 맞는 생각인가요?^^;

 

아흑 오늘까지 빌드성공해야 하는데.. android.mk 파일 만드는것도 난감하네요 ㅜㅜ

고도리님 정말 정말 감사합니다..

쭈암

2012.08.24 09:25:33
*.186.87.8

커널 설정에 CONFIG_IP_SCTP=y 로 빌드되어야 하는거 아닌가요?

만드려고 하시는 App이 거의 커널 교체하고 Rooting 해서 써야하는데..

이런 환경에서 돌리시려고 하는게 맞는건가요?


민경욱

2012.08.24 19:42:54
*.94.41.89

쭈암님/ 네 맞습니다. 해당 옵션을 추가해서 돌려야 한다고 하더라구요!

감사합니다.

고도리

2012.08.25 02:23:31
*.200.239.210

http://www.aesop.or.kr/index.php?mid=Board_Resources_General&document_srl=86161


참고하세요.........제가 도와드릴 수 있는 한계는 여기까지입니다.

민경욱

2012.08.29 05:24:19
*.94.41.89

고도리님 정말 감사드립니다.

몇일 삽질은 했지만 고도리님이 도와주신 덕분에 진행중인 프로젝트에 길이 보이기 시작했습니다^^

정말 정말 감사드립니다!

List of Articles
번호 제목 글쓴이 날짜 조회 수
5488 V310 Linux 관련 문의 [1] 씩씩 2012-08-28 1184
5487 ICS 부팅중 다음과 같은 에러 메시지가 나오며, 부팅이 않되요 [5] 김민욱 2012-08-27 1183
5486 max8997 Power Management 문의 [3] 아따 2012-08-26 1401
5485 안드로이드 파일 시스템 특정 폴더 빌드 않되게 하는 명령 [1] 김민욱 2012-08-26 1542
5484 eglDisplay 관련 질문 [1] 김민욱 2012-08-25 1180
5483 platform driver와 open [1] 박영기 2012-08-24 1132
5482 PVR Kernel 패닉관련 [1] lveritas 2012-08-24 1388
5481 V310 관련 질문 [6] 신현호 2012-08-24 1505
5480 tftp 파일 수신 시 timeout 이 발생 [8] blue0sky 2012-08-23 2604
5479 nexus S 소스 다운 받을려고 하는데요.. [1] 김민욱 2012-08-23 1023
» 라이브러리 관련 질문드립니다. [18] 민경욱 2012-08-23 1440
5477 안드로이드 전원 종료기능을 넣고 싶습니다. [2] 레몬 2012-08-22 2233
5476 Android 기기 출시시 확보 라이센스 문의 [1] 동전귀신 2012-08-22 1302
5475 /mnt/secure/staging 폴더 관련 문의 [1] 뱀휅휅 2012-08-21 1362
5474 samba 설정 문제 [1] blue0sky 2012-08-21 1338
5473 전면 카메라 Frame 문의드립니다. [3] 천향 2012-08-21 1230
5472 SD card 문제로 도움을 요청드립니다. 도주공 2012-08-18 903
5471 이더넷 포트 2개를 같은 대역아이피를 사용할수 있는지요? [11] 은민아빠 2012-08-16 2384
5470 aesop6410보드 안드로이드 프로요까지는 포팅되나요? [5] 호야ho 2012-08-16 1216
5469 VirtualBox 에 Ubuntu 설치 시 에러 관련....... [3] blue0sky 2012-08-16 1798

사용자 로그인