1. NDK 컴파일 방법

2. NDK로 실행파일 만드는 방법 2가지

3. 실행 파일 이나 .so파일을 쉽게 설치하기 위한 bash script 예제

   % 일반적인 폰에서는 .so파일이 설치되는 /system/lib 폴더의 용량이 여유롭지 않아 다소 많은 용량을 설치하기가 어려운데 app2sdcard 기능이 설치되어 있는 경우 추가적으로 /system/sd/expstick/lib에도 설치가 가능해졌다. 이러한 환경에서 수작업으로 파일들을 설치하기가 번거로와 이를 자동으로 처리해 주는 bash script를 작성해 보았다.

#!/bin/bash
# bash for loop

VAR="test.so"
defpath=out/apps/$1/armeabi
target_lib_path=/system/sd/expstick/lib
target_bin_path=/data/tmp
cd $defpath
echo "Current path is "  "$(pwd)"

for f in $( ls . ); do
# echo $f
if  test -f $f ; then
    echo $f "is a file"
    # search ".so"
    if [[ "$f" =~ t*.so ]]
    then
#echo $f "is dynamic library"
echo $f " Install to " $target_lib_path
        adb push ./$f $target_lib_path
    else
if test -x $f ;
then
#echo $f "is executable"
echo $f " Install to " $target_bin_path
adb push ./$f $target_bin_path
adb shell chmod 4777 $target_bin_path/$f
fi
     fi
else
     echo $f "is not a file"
fi
done 


Posted by kevino
,

  • 지금 우리가 놓치고 있는 것들
  • 윤회 oeu**** 윤회님프로필이미지
    • 번호 922759 | 10.03.27 13:19
    • 조회 123 주소복사
    먼저 이번에 희생당한 병사들에게 애도에 뜻을 표합니다.

    참 꼴같지 않는 나라에서 사느라 구역질이 다나네요. 정부에 불리한 여러가지 악재가 터졌다 하면 속시원하게 해결되는 것 하나도 없이 조만간에 뒤이어서 발생하는 사건들. 거기에 맞춰 신문에서 티비에서 알바들이 손잡고 열심히 국민들의 시선을 빼앗는 천편일률적인 시나리오를 우리는 도대체 얼마나 많이 목격했으며 앞으로도 봐야되는 건가요. 이건 국민들이 닭대갈 아이큐보다 1높은 수준으로 밖에 보지 않는 겁니다. 도대체 전봇대 뺀 것 처럼 김길태 검거한 것 처럼 어디 뒷방 할배들 모아놓고 약장수 광고하듯 시덥지 않은 것 빼 놓고 (이거 써놓고 보니 탐관오리배 수준인데) 나라의 근간을 흔들어 놓은 의혹들이 해결된게 뭐가 있는 지 참. 

    우리는 이번일이 쉽게 진상이 밝혀지지 않을 것이란 것을 압니다. 그렇게 쉽게 밝혀질 수 있는 것같았으면 초기 대응이 이렇게 진행됐을리가 없겠죠.  지금 불만이 가득한 국민이 다른 곳으로 시선이 돌아가지 못하게 하려고 계속 의혹만 증폭시켜서 한동안 열심히 신문에서 티비에서 푸닥거리를 열심히 할 겁니다. 이제는 누구나가 언론이 제할말을 못하고 정부의 선전기관으로 전락해버린 것을 압니다. 이런 현실에서 언론이 보여주는 프레임에만 갖혀 다른 부분을 놓치고 있는 것 아닌가하는 생각을 해봐야 됩니다. 

    어짜피 정부에서 언론에서 밝혀주지 않으면 일반 국민들은 추측만 가능할뿐 해결은 될 사항이 아니므로 우리는 우리가 좀더 주체적으로 지금 나라에서 쌓인 의혹들과 잘못을 풀어나가는데 힘을 기울여야 합니다. 한국이 언제부터 개독의 나라가 됐던가요 언론과 방송은 왜 정부의 나팔수만으로 일방통행을 계속하나요? 나라의 세금을 쥐가 세간살이 갉아먹듯이 갈취하는 무리들이 버젓하게 활개치고 있는데 떡찰이 활개치고 정의가 사라지고 있는데  야당은 해결책이 없다고 그저 손톱만 뜯어 물고 있고 도대체 깨어있는 사람들은 어디 있는 건가요? 

    민주주의의 근간은 이미 훼손될대로 훼손됐고 뿌리까지 뽑힐 지경입니다. 여기서 일본에 독도도 넘기고 나라도 팔아 넘기고 있는데 아직도 이나라를 바로 세우겠다고 나서는 사람은 어디에 찾아봐도 없네요. 그저 저속한 이기주의만이 온 나라를 휘감고 거짓과 사기로라도 돈만 벌면 장땡이라는 극한의 배금주의에 물든 여론층만이 이땅에 존재하고 있습니다. 

     이글을 읽는 여러분이 깨어있어야 합니다. 주어지는 매트릭스에 갖혀서는 진실을 바라볼 수 없습니다. 지금 우리가 할 수 있는 일이 뭐고 할 수 없는 일이 뭔지 구분을 해야 합니다. 우리는 모든 것을 동시에 다 할 수 없습니다. 정부가 언론에서 밝혀 주지 않고 의혹만이 난무하는 상태에서 일반 민초들이 시선을 뺏겨 의혹만들기에 동참하면 이미 매트릭스에 빠진 겁니다. 우리가 해결할 수 없는 일은 사태를 주시하되 적극적인 글올리기는 우리의 정력을 쓸데 없는 곳으로 낭비하는 결과를 초래합니다. 또한 더 긴급한 일에 신경을 더 써야 할 때입니다. 

    민주주의가 무너지고 있습니다. 종교의 편향이 너무 심해지고 언론의 자유도가 심각하게 훼손되고 있습니다. 부의 편중이 심화되어 가고 있어서 사회의 불만은 많아지는데 정부가 얘기한 대기업에서 노동자에게로 흘러야할 낙수효과는 점점 거짓이 되어가고 소수의 이권층만 잘 살고 대다수의 백성들이 소득수준이 떨어져 궁핍해져가는 상황은 남미를 생각나게 합니다. 양극으로 갈라지고 간격이 커져 갈수록 갈등의 폭도 커져갑니다. 아직 응어리져 있는 갈등을 눈감고 있는 정부는 점점 쌓여가는 불만을 잠재우기 위해 맞춰 좀더 고강도의 성동격서를 찾아 해매이는 듯 보입니다. 분출구를 찾을 수 없는 갈등의 증폭은 해소시켜주지 않고 계속 억누르게 되면 더 커다란 파국으로 터지는 것이 세상의 이치입니다. 

     나라의 민주주의가 심각할 정도로 훼손되어 있는 상황입니다. 현재의 정부는 브레이커없이 폭주하고 있습니다. 앞을 비켜라하는 요란한 경적만을 울릴 뿐 아무리 속도를 늦추라고 신호를 보내고 정지 신호 켜놔도 무시하고 일방통행으로 달리고 있습니다. 자체 브레이크가 없다면 외부에서라도 멈춰세우고 기관점검을 해야 하며 올바른 길로 인도해야지 그릇된 방향으로 가거나 탈선하는 것을 막을 수 있습니다. 

    본론입니다. 민주주의의 근간을 다시 바로 세우는 일이 무엇보다도 시급합니다. 정부와 민초들의 간격이 점차 커져서 극복하기 힘들 정도입니다. 당장 정부와 언론에서 발표하는 여론 조사의 결과가 수긍이 가지 않습니다. 떡찰은 정권의 개가 되어 민주를 물어 뜯고 있습니다. 개독뿐만 아니라 불교에까지 정치논리에 의해 마수의 손길을 뻗치고 있습니다. 이러한 민주주의에 역행하는 행동을 막아야 합니다. 

    그러기 위해서는 민초들의 정확한 의견이 반영될 수 있도록 노력해야 합니다. 먹고 사는데 또는 헛공부하는데 힘을 쏟는 사람들일 수록 이러한 현실을 모르는 사람들이 많습니다. 이러한 사람들에게 현실에 대한 정확한 인식을 심어줘야 합니다. 그래야 여론이 알바나 기득권을 놓치 않으려는 정권의 개들에 의해 왜곡되지 않습니다. 민초들에게 현실과 이대로 갈 경우 닥쳐올 암울한 미래를 정확하게 알려줘야 6월2일 선거때  민초들의 표를 받고도 민초들의 안녕을 위협하는 정책을 펼치는 무리들이 당선되는 불행한 사태가 벌어지지 않습니다.

    이번에 결과로 이나라의 명운이 갈라질 겁니다. 독도를 넘기고 자위대가 한국에 주둔하며 일본전주에 민초들은 빚으로 허덕이며 신국채보상운동이 다시 일어나지 않는다는 보장이 없습니다. 이미 명동사채시장은 일본 계열로 넘어갔고 광고에서 줄기차게 나오는 대출업체는 대부분이 일본계열입니다. 이미 죽어버린 부동산을 살리기 위해 이자가 싼 일본돈을 대량으로 빌려 오는 것은 국가 재정에 심각한 위험요소가 됩니다. 무엇보다다 심각한 일은 이러한 위험을 서민들에게 적절한 경고해주는 기관이 없이 나몰라라 하고 있고 오히려 높아가는 위험속에서 소득이 없는 서민들은 돈이 필요할때마다 접근하기 쉬운 일본계열의 사설 대부업체들에게 빚을 얻게 되는 그야 말로 총체적인 일본향 빨대 구조의 완성이 굳건해져 가고 있는 상황입니다. 이러다간 나라도 팔고 제2의 을사조약도 맺게 되는 미래가 점점 가까워 오고 있습니다. 누가 폭주 기관차를 멈춰 세울지.

    • 태그 브레이크없는폭주기관차, 우리가놓치고잇는것
    Posted by kevino
    ,
  • 한국, 일본, 미국경제의 문제점과 해결방법
  • 뒤에서 보면 who*** 뒤에서 보면님프로필이미지
    • 번호 922778 | 10.03.27 13:33
    • 조회 64 주소복사


    한국, 일본, 미국경제의 문제점과 해결방법


    우리나라와 일본, 미국이 겪고 있는 경제위기의 현상은 상당한 차이를 보이고 있지만 그 본질은 다 같이 소득불균형에 따른 소비의 축소와 그로인한 생산축소, 고용축소, 다시 소비축소라는 악순환의 고리가 작동하는 전형적인 공황이다. 단지 각국이 처한 경제환경이 다르기 때문에 나타나는 현상 또한 약간씩 다르게 나타날 뿐이다. 그러므로 그 처방전 역시 약간씩은 다르더라도 그 본질은 같을 수밖에 없다.


    얼마 전에‘국제경제위기의 끝은 어디까지일까?’라는 글로 미국경제의 붕괴는 막을 수 있는 시기가 지났다고 설명을 했지만, 그래도 아직 마지막 기회는 남아 있다는 생각이 들어서 이 글을 쓴다.


    참조: 국제경제위기의 끝은 어디일까?

    http://cafe.daum.net/kseriforum/7ofr/5426?docid=16KDv|7ofr|5426|20100226112251&q=%B1%B9%C1%A6%B0%E6%C1%A6%C0%A7%B1%E2%C0%C7%20%B3%A1%C0%BA%20%BE%EE%B5%F0%C0%CF%B1%EE%3F&srchid=CCB16KDv|7ofr|5426|20100226112251

     

    http://bbs1.agora.media.daum.net/gaia/do/debate/read?bbsId=D115&articleId=891685

     



    Ⅰ.한국


    1.문제점


    우리나라경제의 문제점은 1)지속적으로 내수가 축소되고 있어, 성장잠재력이 하락하고, 고용이 축소되고 있고, 2)국가부채와 가계부채가 확대되어 부동산 등 버블이 정점에 도달해 가고 있어서 붕괴될 상황을 맞고 있고, 3)환율의 변동성이 높고, 외환위기가 상시화 되고 있다는 점이다.


    2.문제의 원인과 해결방법


    1)내수가 축소되고, 성장잠재력이 하락하고, 고용이 축소되는 원인은 자본과 노동의 부가가치배분율의 차이가 확대되고, 생산과 소비의 격차가 심해지고, 소득분배가 악화되고 있기 때문이다.


    자본의 노동에 대한 부가가치배분율확대는 과학기술의 발달과 국제경쟁의 격화로 인한 현상이고, 생산과 소비의 격차확대는 국가의 자원배분 불균형 때문이다. 고용이 축소되고 있는 이유는 소비의 축소 때문이고, 소비의 축소는 자원배분의 불균형과 소득분배의 악화 때문이고, 소득분배의 악화의 주요인은 노동유연화정책과 부채에 의한 성장 정책 때문이다.


    따라서 내수축소를 막고, 성장률을 높이고, 고용을 확대하기 위해서는 (1)자본과 노동의 부가가치배분율이 일정한 수준을 계속 유지하도록 해야 하고, 그 방법은 고용인원(정규직) 대비 평균부가가치금액을 기준으로 법인세율을 차등화하거나 누진화하여야 한다. (2)생산과 소비의 격차를 줄이기 위해서는 국가의 자원배분을 생산지원위주인 공급경제시스템에서 소비지원위주인 소득재분배시스템으로 전환해야 하고, (3)소비와 고용을 확대하기 위해서는 소득분배를 확대하고, 최저임금을 인상하고, 부채증가에 의한 성장방식을 중지해야 한다. 부채를 줄여야 한다.


    2)버블붕괴문제는 어떠한 방법으로도 막을 수가 없는 것이다. 단지 있다면 버블을 인위적으로 붕괴시키는 즉, 버블을 인위적으로 걷어내는 방법과 버블붕괴의 부작용을 최소화하는 방법이 있다.


    두 가지 다 부채를 축소하면서 소득분배를 확대(소득재분배정책을 사용)하고, 버블붕괴의 부작용이 취약한 부문으로만 몰리는 것을 막기 위해서 취약한 부문을 위한 방화벽을 구축하는 방법이다. 방화벽구축은 설명하면 길어지나 금융시스템을 개편하여야 방화벽 구축이 가능하다.


    3)환율의 변동성과 외환위기의 상시화문제는 자본수지의 변동과 외화부채의 과다와 쏠림현상, 정부의 경제에 대한 근시안적인 개입정책 때문에 발생하고 있다.


    자본수지의 변동은 우리나라의 경제정책방향이 부채에 의한 성장과 자본에 대한 과다한 이익보장 정책과 국제경제의 유동성변동 때문에 발생하고 있다. 부채에 의한 성장을 중지하고, 자본에 대한 과다한 이익보장을 줄이고, 정부의 단기정책에 의한 인위적인 개입을 줄이면 환율의 변동성도 그만큼 줄어들 것이다. 외화부채가 줄어들고, 환율의 변동성이 줄어들면 그만큼 쏠림현상도 줄어들고, 외환위기도 줄어들고 약해질 것이다.



    3.소득재분배정책


    1)재원확보 140조원

    -세입확대 (직접세최고세율인상위주의 증세) 50-70조원

    -세출축소 (생산지원 50조원, 행정경비 20조원) 50-70조원


    2)정부지출확대 140조원

    -소득재분배 (1단계 75조원, 2단계 90조원) 75-90조원

    -과학기술, 복지보충, 임대주택, 부채상환 25-50조원



    4.부정적인 효과


    일정(6개월 내지 1년)기간 동안 환율상승이 예상된다. 부채축소정책에 의한 이자율 인상과 자본의 이익률저하에 의한 자본탈출의 상충에서 일정기간동안 환율이 상승할 것이라고 본다.


    자본의 이익률 저하는 생산성향상을 약화시켜 국제경쟁력을 낮추게 될 것이지만, 자원배분의 변경(소득재분배정책)은 정부투자의 효율성을 확대하게 할 것이다. 단기적으로는 국제경쟁력이 약화될 것이지만 장기적으로는 국제경쟁력이 더 강화될 것이라고 본다.



    Ⅱ.일본


    1.문제점


    일본경제의 문제점은 1)내수축소로 인한 경제침체의 지속이고, 2)경기부양을 위한 정부의 재정지출 확대에 따른 재정위기(국가부채확대)다.


    2.문제의 원인과 해결방법


    내수축소는 일본의 경제구조 때문이기도 하지만, 근본원인은 자본의 노동에 대한 부가가치배분율확대, 생산과 소비의 격차확대, 부채확대 등에 의한 소득분배의 악화가 내수를 축소시키고, 소득을 양극화시키고, 고용을 축소시킨다.


    일본의 내수축소는 우리나라와 같은 이유로 발생하고 있으므로 해결방법 또한 같다. 다만 국가부채의 정도가 우리나라보다 높으므로 소득재분배정책에서 세입부분은 좀 더 강하게, 재분배(세출)부분은 약하게 사용해야 하고, 과학기술 등에 대한 투자도 우리나라보다 축소할 수밖에 없다.


    내수축소를 막고, 성장률을 높이고, 고용을 확대하고 국가부채를 줄이기 위해서는,

    1)자본과 노동의 부가가치배분율이 일정한 수준을 계속 유지하도록 해야 하고, 그 방법은 고용인원(정규직) 대비 평균부가가치금액을 기준으로 법인세율을 차등화하거나 누진화하여야 한다.

    2)국가의 자원배분을 생산지원위주인 공급경제시스템에서 소비지원위주인 소득재분배시스템으로 전환하고, 최저임금을 인상하고, 부채증가에 의한 성장방식을 중지해야 한다.


    3.해결 후 나타날 부정적인 효과


    정부의 부채축소는 이자율을 높일 것이고, 이자율이 높아지면 일본엔화자본이 일본으로 환류하게 될 것이다. 자본의 환류와 내수확대가 맞물려 일정한 기간 동안 약간의 경상수지적자가 예상된다.

    일본의 경상수지적자는 그 동안의 경상수지흑자에 대한 반작용의 성격이 강하므로 피할 수 없는 현상이다.



    Ⅲ.미국


    1.문제점과 해결방향


    미국경제의 문제점은 1)재정적자(국가부채)확대, 2)경상수지의 적자 3)내수의 축소와 고용감소로 구분할 수가 있다.


    재정적자는 금융시스템의 위기로 인한 양적완화를 제외하면 과다한 국방비 때문이라고 본다. 상당한 기간 동안 재정적자문제를 해결할 수는 없다고 본다. 하지만 상당한 수준으로 줄일 수는 있을 것이라고 보며, 줄이지 않을 수가 없을 것이다.


    미국의 경상수지적자의 문제를 중국의 고정환율제와 위안화저평가 때문이라고 보는 견해가 있지만, 나는 중국보다는 미국 자체의 문제라고 본다.


    왜냐 하면 위안화가 저평가된 이유가 근본적으로 달러가치의 하락에 위안화가 연동되어 있기 때문이고, 위안화고정환율제를 폐지하는 것은 현재 중국의 경제능력이나 시스템으로는 불가능하다고 보고, 환율제도 자체는 각국의 주권에 관한 문제고, 고정환율제가 중국경제에 주는 부정적인 영향 또한 만만치 않으므로 미국에게 불리하고 중국에게만 유리하게 작용하는 것이 아니기 때문이다. 또 위안화를 절상한다고 해도 풍선효과가 발생하고, 또다시 달러가치가 하락하면 다시 절상해야 하는 문제가 발생하기 때문이다.


    미국의 경상수지적자 문제의 근본원은 미국의 경제시스템에 있다. 미국의 경상수지적자를 줄이기 위해서는 미국산업의 경쟁력을 높여야 하고, 미국의 산업이 경쟁력을 상실한 가장 근본원인은 미국산업의 불균형 때문이다. 미국의 산업에서 금융부문이 발달했기 때문에 미국의 다른 산업이 경쟁력을 잃은 것이고, 그 결과 금융부문에서는 흑자를 보지만 무역부분에서 적자를 보게 된 것이다.


    미국의 금융부분의 부가가치는 그 대부분이 GDP증가와는 상관없는 이전(약탈)소득으로 구성되어 있고, 금융부문의 1인당부가가치금액은 다른 산업과는 비교를 할 수 없을 정도로 높다. 금융부문의 부가가치가 높으면 높을수록 미국과 세계의 소득분배는 악화되고, 미국과 세계의 고용수준도 떨어지게 된다. 미국의 재정적자(부채확대)와 통화확대 또한 같은 역할을 한다.


    따라서 미국의 산업이 경쟁력을 만회하기 위해서는 고용을 확대하기 위해서는 금융의 부가가치를 줄여야 하고, 소득분배를 확대해야 한다. 그 방법은 (1)금융의 팽창을 막고, 위험을 막기 위한 규제를 강화하고, (2)자본의 노동에 대한 부가가치분배율을 확대를 막기(축소하기) 위하여 1인당부가가치금액을 기준으로 법인세율을 누진제로 전환하고, (3)소득재분배정책을 사용해야 한다. 미국이 기축통화국인 만큼, 금융산업의 경쟁력이 강한 만큼 다른 나라보다 더 금융에 대한 규제를 강화하고, 법인세 누진제를 강화하고, 소득재분배정책을 강화해야 한다.


    소득재분배를 확대하면 미국의 고용도 늘어나고, 소득재분배정책을 정교하게 설계하면 산업의 경쟁력도 높일 수가 있고, 경상수지적자도 대폭 줄일 수가 있다.



    2.미국경제(기축통화국)의 특성


    1)정부의 부채확대와 구매력의 이전


    미국정부가 재정적자로 국채를 (연방은행매입형식으로)발행하면, 그만큼 달러가치는 하락한다. 하지만 미국 정부는 통화를 확대한 만큼의 구매력을 행사하게 되고, 달러가치하락에 따른 피해는 달러 또는 달러표시채권을 가진 국가나 사람이 부담하게 된다. 이것이 미국 정부에게 양적완화를 지속하게 하는 근본 원인이고, 재정적자를 지속하더라도 미국경제에 주는 부담이 적은 원인이다.


    반면에 현재의 재정적자원인을 줄이면 그만큼 소득재분배할 수 있는 재원을 추가로 확보할 수도 있다는 의미도 되고, 약간의 재정적자와 약간의 소득재분배재원을 확대하고도 미국경제의 외부균형을 유지하게 할 수도 있다는 것을 의미하며, 미국 경제가 일정한 부분 경상수지 적자를 유지하게 하는 원인이 되기도 한다.


    소득재분배를 확대하면 할수록 고용이 확대될 수가 있으므로 소득재분배재원의 추가확보는 미국산업의 경쟁력 확보에도 긍정적으로 작용할 수가 있다.


    2)중국의 고정환율제와 통화가치하락의 문제


    미국의 무역적자는 미국산업의 경쟁력약화 때문이지 중국의 고정환율제 때문이 아니다. 중국의 무역흑자는 사실상 미국의 달러가치하락 때문에 중국이 변동환율제를 채택한 다른 나라에 비해서 상대적으로 유리하게 되었기 때문에 무역흑자가 발생한 것이다. 이것은 중국이 변동환율제를 채택하더라도 미국의 무역적자가 크게 줄어들지 않을 것이라는 것을 의미한다.


    미국의 무역적자는 중국의 고정환율제 때문이 아니고, 미국이 세계경제의 부가가치를 이전(약탈)하는 방식으로 외부와의 균형을 이루겠다는 금융시스템을 고수하기 때문이다. 미국이 현재의 금융시스템을 유지하는 한 미국의 무역적자는 미국이 금융을 이용하여 세계의 부가가치를 이전(약탈)하는 것보다 더 크게 확대될 수밖에 없다.

    따라서 세계 각국의 국가할인제에 의한 수출확대나 중국의 고정환율제에 의한 수출확대 또한 불가피한 선택이라고 봐야 한다.



    현재의 중국의 경제능력으로 보아 고정환율제를 폐기하기가 어렵다고 본다. 고정환율제를 폐지하더라도 외국인의 자유로운 투자나 자유로운 자본의 유출입만은 막을 것이라고 본다.

    만약 미국달러가 적정 가치를 유지한다면, 미국의 산업이 경쟁력을 유지한다면 미국이 중국에 대한 위안화의 절상이나 고정환율제폐지를 요구할 이유도 없다.



    3.해결 후 나타날 문제점


    해결 후 나타날 문제점은 자본의 이탈과 패권의 양보다.


    현재 미국의 상황은

    외부적으로는 세계패권을 계속 추구하다가 국가까지 몰락할 것인지, 아니면 패권의 상당부분을 양보하고 내부의 균형유지를 통하여 체력을 회복할 것인지를 선택해야 하는 시기이고,


    내부적으로는 기득권세력이 기득권을 계속 추구하다가 가지고 있는 모든 기득권을 다 잃을 것인지, 아니면 기득권을 대폭 양보하고 미국서민들과 공존하면서 기득권의 최소한이라도 유지할 것인지를 선택해야 하는 시기라고 본다.



    역대 미국을 보면 민주당은 내부의 균형을 중요시하는 고립주의를 추구하는 경향이 있고, 공화당은 내부의 균형보다는 외부로의 힘의 투사, 확산을 중요시 한다.


    따라서 미국이 내부의 균형을 중요시하고 고립주의를 선택하면 외부로 부터의 이민, 무역규제가 심해질 것이고, 패권이나 확산을 선택하면 이민규제나 무역규제는 축소될 수밖에 없다.


    세상은 하나를 얻으면 하나를 내 놓아야 한다. 미국이 내부의 균형을 이루겠다면 일정부분 패권을 양보해야 하고, 패권을 추구하면서 이민이나 무역규제를 강화하는 것은 이치에 맞지 않는 욕심쟁이나 강도와 같은 행위고, 지속이 불가능한 행위일 뿐이다.



    미국이 내부적으로 균형을 이루기 위해서 금융을 규제하고, 법인세율을 누진제로 바꾸고, 소득재분배정책을 사용하고, 저임금을 인상하면 자본이익률이 하락하므로 자본이 이탈하게 될 것이다.



    자본이탈에 대한 영향을 분석하려면, 각국의 국가전략, 대응전략까지 검토해야 하므로 사실상 불가능하다고 본다.


    하지만 현재의 국제경제 환경은 자본의 유입이 긍정적인 효과만을 주지 않고 부정적인 영향 또한 그만치 많다는 것을 생각하고, 자본은 성격상 이익을 찾아다니지만, 이익보다는 안전을 더 중요시 하고, 자본의 안전은 진출입이 자유로움에 있다. 자본의 진출입이 자유로우면 그만치 부정적인 효과가 더 많이 발생하게 한다는 점을 생각하면, 자본의 이탈이 미국에게 부정적인 영향만을 주는 것이 아니라는 생각이 든다.


    또한 한 국가의 경쟁력은 자본만이 아니고 과학기술이 자본보다 더 중요하다고 생각한다면 국가의 경쟁전략을 민간자본에서 과학과 기술, 노동으로 이동시켜야 한다고 본다.

    (2010.3.27)



    P.S: 이 글을 끝으로 우리나라의 경제에 관한 문제에 대해서는 한 바퀴를 다 돈 것 같습니다. 그 동안 올렸던 글과 올리기가 적당하지 않아 써놓고 올리지 않았던 글을 ‘우리나라경제의 문제점과 해결방법’이라는 제목으로 보완·정리해 보았습니다.


    다음과 같은 차례로 일주일에 3개정도씩 올려놓겠습니다. 일단 제 블로그와 김광수카페, 아고라에만 올릴까 합니다.



    우리나라경제의 문제점과 해결방법


    1.글의 취지


    2.우리나라 경제의 문제점에 대한 총론적 분석

    1)우리나라경제의 현상

    2)우리나라경제문제의 원인에 대한 분석


    3.국제경제위기의 원인, 전망, 대안


    4.우리나라경제의 문제점과 해결방향

    1)경제시스템의 문제

    2)정책방향의 문제

    3)경제의 주요당면문제


    5.국가개혁추진을 위한 전략과 전술

    6.국가의 발전과 시스템의 관계

    7.민주주의관료제행정시스템


    Posted by kevino
    ,

    Original Link: http://betelco.blogspot.com/2010/01/buildingdebugging-android-native-c.html

    Building/Debugging android native C applications

    In this post I will explain how to compile, install and debug an Android native "C" application.
    If you are reading this post just because you have googled the magic keywords ("android" + "native code") then you should know that there is an easier way to build native applications using android makefiles ("Android.mk" and "Application.mk").
    The method I'm describing here is only useful if you want to understand how things work in order to create more complexstandard GNU makefiles. This is also useful if you would like to create your own GNU autotools wrappers to compile projects using GNU configure.
    I'm using Windows Vista as host machine but any other supported platforms (e.g. linux-x86 or darwin-x86) should work.

    I have tested both the NDK (1.6) and SDK (2.1) on:
    • Windows XP (32-bit) and Vista (64-bit)
    • Mac OS X Snow Leopard
    • Ubuntu Intrepid
    Installing Android SDK

    To download the latest Android SDK, visit this address http://developer.android.com/sdk/index.html.
    If you need information on how to install the SDK, visit this address http://developer.android.com/sdk/installing.html.
    If the "SDK setup" fail to update the installed packages you can change the remote site URL from https://dl-ssl.google.com/android/repository/repository.xml to http://dl-ssl.google.com/android/repository/repository.xml (change the URL scheme from HTTPS to HTTP) or try to disable your anti-virus or firewall.

    I have installed the SDK version 2.1 under c:/android-sdk (a.r.a /cygdrive/c/android-sdk).
    Add an environment variable named ANDROID_SDK_ROOT pointing to the SDK root directory.

    Important: You should add "$ANDROID_SDK_ROOT/tools" directory to the $PATH environment variable.
    Under *nix:

    export PATH=$ANDROID_SDK_ROOT/tools:$PATH
    Under Cygwin: Open C:\Cygwin\Cygwin.bat and add:

    set PATH=%ANDROID_SDK_TOOLS%;%PATH%
    Installing Cygwin

    If you are using Windows XP or Vista as host machine then you MUST install Cygwin Devel package with GNU Make (3.81 or later) before installing the NDK.
    It should also work with MinGW.

    Installing the Android NDK

    To download the latest Android NDK, visit this address http://developer.android.com/sdk/ndk/1.6_r1/index.html.
    I have uncompressed the NDK version 1.6 under c:/android-ndk (a.r.a /cygdrive/c/android-ndk).
    Add an environment variable named ANDROID_NDK_ROOT pointing to the NDK root directory.
    To install the NDK:

    cd $ANDROID_NDK_ROOT
    build/host-setup.sh
    If all is OK then the console will print Host setup complete.
    To test that the toolchain has been correctly installed you can try to build the hello-jni sample which comes with the NDK by doing this:

    cd $ANDROID_NDK_ROOT
    make -APP=hello-jni
    If all is OK then the console will print:

    Android NDK: Building for application 'hello-jni'
    Compile thumb : hello-jni <= sources/samples/hello-jni/hello-jni.c SharedLibrary : libhello-jni.so Install : libhello-jni.so => apps/hello-jni/project/libs/armeabi
    This mean that your native shared library (libhello-jni.so) have been successfully generated under$ANDROID_NDK_ROOT/apps/hello-jni/project/libs/armeabi folder.

    Creating an AVD

    AVD stands for Android Virtual Device and can be seen as a device profile (keyboard, dialing pad, skin, screen dimensions, appearance ...) to load into your emulator. You can create as many AVDs as you need.
    To create an AVD named "avdtest" targeting platform 2.1 (targetID=android-7):

    android create avd -n avdtest -t android-7
    If all is OK the console will print:

    Created AVD 'avdtest' based on Android 2.1, with the following hardware config: hw.lcd.density=160
    Create test.c

    Here I will create a basic test.c file under C:\tmp with the following content:

    #include <stdio.h>// printf

    int main(int argc, char **argv)
    {
    int i = 1;
    i+=2;

    printf("Hello, world (i=%d)!\n", i);

    return 0;
    }
    Create makefile

    Just create an empty file named makefile (without any extension) under C:\tmp (which is the same directory as test.c).
    Now We will fill the makefile step by step.

    Add application name, $ROOT directory, install directory and the NDK platform version:

    APP := test
    ROOT:=/cygdrive/c
    NDK_PLATFORM_VER := 1.5
    INSTALL_DIR := /data/tm
    Add useful environment vars:

    ANDROID_NDK_ROOT:=$(ROOT)/android-ndk
    ANDROID_NDK_HOST:=windows
    ANDROID_SDK_ROOT:=$(ROOT)/android-sdk
    PREBUILD:=$(ANDROID_NDK_ROOT)/build/prebuilt/$(ANDROID_NDK_HOST)/arm-eabi-4.2.1
    BIN := $(PREBUILD)/bin
    You MUST change ANDROID_NDK_HOST value from windows to linux-x86 if you are under *nix or darwin-x86 on MAC OS X.

    Add GCC options:

    CPP := $(BIN)/arm-eabi-g++
    CC := $(BIN)/arm-eabi-gcc
    CFLAGS :=
    LDFLAGS := -Wl
    Add targets

    all: $(APP)

    OBJS += $(APP).o

    $(APP): $(OBJS)
    $(CPP) $(LDFLAGS) -o $@ $^

    %.o: %.c
    $(CC) -c $(INCLUDE) $(CFLAGS) $< -o $@
    install: $(APP)
    $(ANDROID_SDK_ROOT)/tools/adb push $(APP) $(INSTALL_DIR)/$(APP)
    $(ANDROID_SDK_ROOT)/tools/adb shell chmod 777 $(INSTALL_DIR)/$(APP)

    shell:
    $(ANDROID_SDK_ROOT)/tools/adb shell

    run:
    $(ANDROID_SDK_ROOT)/tools/adb shell $(INSTALL_DIR)/$(APP)

    clean:
    @rm -f $(APP).o $(APP)
    Building the application

    To build the application, switch to the directory where you have created both files and then:

    make
    At the output of the console you will get many errors saying that it's impossible to find stdlib.h, stdio.h etc etc.
    To resolve this issue, add the Bionic header files to $CFLAGS variable like this:

    CFLAGS := -I$(ANDROID_NDK_ROOT)/build/platforms/android-$(NDK_PLATFORM_VER)/arch-arm/usr/include
    If you retry (make) you will now get this link error:

    rt0.o: No such file: No such file or directory
    To avoid directly linking against the "C runtime" you must add "-nostdlib" flag to the link options like this:

    LDFLAGS := -Wl -nostdlib
    If you retry (make) you will now get these link errors:

    test.c:(.text+0x34): undefined reference to `printf'
    test.c:(.text+0x3c): undefined reference to `exit'
    You get these errors because Bionic libc is missing. To add libc you MUST change $LDFLAGS like this:

    LDFLAGS := -Wl -L$(ANDROID_NDK_ROOT)/build/platforms/android-$(NDK_PLATFORM_VER)/arch-arm/usr/lib
    LDFLAGS += -nostdlib -lc

    If you retry (make) you will now get this link error:

    /cygdrive/c/android-ndk/build/platforms/android-1.5/arch-arm/usr/lib/libc.so: undefined reference to `dl_unwind_find_exidx'
    To resolve this issue you MUST specify the first set of directories into which to search the system shared libraries (*.so) . This is done by adding the "-rpath-link" option to the link options like this:

    LDFLAGS := -Wl,-rpath-link=$(ANDROID_NDK_ROOT)/build/platforms/android-$(NDK_PLATFORM_VER)/arch-arm/usr/lib -L$(ANDROID_NDK_ROOT)/build/platforms/android-$(NDK_PLATFORM_VER)/arch-arm/usr/lib
    If you retry (make) you will now get this warning:

    /cygdrive/c/android-ndk/build/prebuilt/windows/arm-eabi-4.2.1/bin/../lib/gcc/arm
    -eabi/4.2.1/../../../../arm-eabi/bin/ld: warning: cannot find entry symbol _start; defaulting to 000082c8
    This is an Android known issue. You have this warning because the linker search "_start" as entry point. You can resolve this issue by renaming your main function. But the elegant way to resolve this issue is to specify the entry point in the link options like this:

    LDFLAGS := -Wl,--entry=main,-rpath-link=$(ANDROID_NDK_ROOT)/build/platforms/android-$(NDK_PLATFORM_VER)/arch-arm/usr/lib -L$(ANDROID_NDK_ROOT)/build/platforms/android-$(NDK_PLATFORM_VER)/arch-arm/usr/lib
    LDFLAGS += -nostdlib -lc
    Now When you retry (make) your application will successfully build without any errors or warnings.

    Testing your application

    Before testing your application you MUST run the emulator like this:

    emulator -avd avdtest
    where "avdtest" is the name of the previously created avd (see "creating an avd" section).
    To install the application on the emulator, open a new console and go to to directory where you have created test.c andmakefile. Install your application on the emulator like this:

    make install
    If all is OK the console will print:

    /cygdrive/c/android-sdk/tools/adb push test /data/tmp/test
    304 KB/s (2493 bytes in 0.008s)
    /cygdrive/c/android-sdk/tools/adb shell chmod 777 /data/tmp/test
    To run the application type:

    make run
    You will probably get an error message saying:

    /cygdrive/c/android-sdk/tools/adb shell /data/tmp/test
    /data/tmp/test: not found
    This error message is a bit confusing because if you browse the /data/tmp directory you will notice that the executable is here. The question is why?
    I spent hours searching and I found that this error happens because the loader fails to load the application because it cannot found a proper linker.
    To specify a search directory for the dynamic linker (at run time) you MUST change the link options like this:

    LDFLAGS := -Wl,--entry=main,-rpath-link=$(ANDROID_NDK_ROOT)/build/platforms/android-$(NDK_PLATFORM_VER)/arch-arm/usr/lib,-dynamic-linker=/system/bin/linker -L$(ANDROID_NDK_ROOT)/build/platforms/android-$(NDK_PLATFORM_VER)/arch-arm/usr/lib
    LDFLAGS += -nostdlib -lc
    Now rebuild and install your application (make clean && make && make install) then run it again (make run).
    The console will print the expected result ("hello, world (i=3)!") but just after we have an segmentation fault error("[1] Segmentation fault /data/tmp/test").
    To resolve this issue you can exit the program (exit(0);) just before the main function returns (return 0;). You should also include <stdlib.h>.
    If you retry the build&&run process (make clean && make && make install && make run) then you should have:

    /cygdrive/c/android-sdk/tools/adb shell /data/tmp/test
    Hello, world (i=3)!
    which is the expected result.

    Debugging your application
    Before doing anything you MUST copy the gdbserver file to the emultor.
    This file is under $BIN ($ANDROID_NDK_ROOT/build/prebuilt/$ANDROID_NDK_HOST/arm-eabi-4.2.1/bin).
    Copy gdbserver to the emulator like this:

    adb push gdbserver $INSTALL_DIR/gdbserver
    adb shell chmod 777 $INSTALL_DIR/gdbserver
    where $INSTALL_DIR is the directory where you have installed your application (it's not mandatory to copy it in this directory).
    Before running the server on port 1234 you MUST redirect all tcp connection to this port like this:

    adb forward tcp:1234: tcp:1234
    it's not mandatory to forward connections to the same port number.
    Now it's time to run the server:

    adb shell $INSTALL_DIR/gdbserver :1234 $INSTALL_DIR/$APP
    note that only the server port is specified (no host).
    If all is OK the the server will print something like this:

    Process /data/tmp/test created; pid = 246
    Listening on port 1234
    Now to debug our application we will change the makefile by adding a new debug target like this.

    GDB_CLIENT := $(BIN)/arm-eabi-gdb

    debug:
    $(GDB_CLIENT) $(APP)

    To launch the application in debug mode type "make debug" (after make clean && make && make install of course). If you do this, you will see a warning message saying that "no debugging symbols found". No symbols ==> no debug.
    To generate debug symbols you MUST change the makefile like this (should not be hard coded like this):

    DEBUG = -g
    CFLAGS := $(DEBUG) -I$(ANDROID_NDK_ROOT)/build/platforms/android-$(NDK_PLATFORM_VER)/arch-arm/usr/include
    Now rebuild and install your application (make clean && make && make install) then run it again (make debug). This (make debug) should open gdb invite command((gdb)) on the same console.
    Connect to the server (from the same console) like this:

    target remote :1234
    Set a breakpoint on the main function and execute step by step (commands above are informational and you can use any gdb commands):

    b main
    c
    n
    p i 
    #$1 = 1
    n
    #9 printf("Hello, world (i=%d)!\n", i);
    p i 
    #$2 = 3
    c
    #Program exited normally.

    The final makefile and test.c files are shown below:

    makefile

    APP := test
    ROOT:=/cygdrive/c
    INSTALL_DIR := /data/tmp
    NDK_PLATFORM_VER := 1.5

    ANDROID_NDK_ROOT:=$(ROOT)/android-ndk
    ANDROID_NDK_HOST:=windows
    ANDROID_SDK_ROOT:=$(ROOT)/android-sdk
    PREBUILD:=$(ANDROID_NDK_ROOT)/build/prebuilt/$(ANDROID_NDK_HOST)/arm-eabi-4.2.1
    BIN := $(PREBUILD)/bin
    GDB_CLIENT := $(BIN)/arm-eabi-gdb

    DEBUG = -g

    CPP := $(BIN)/arm-eabi-g++
    CC := $(BIN)/arm-eabi-gcc
    CFLAGS := $(DEBUG) -I$(ANDROID_NDK_ROOT)/build/platforms/android-$(NDK_PLATFORM_VER)/arch-arm/usr/include
    LDFLAGS := -Wl,--entry=main,-rpath-link=$(ANDROID_NDK_ROOT)/build/platforms/android-$(NDK_PLATFORM_VER)/arch-arm/usr/lib,-dynamic-linker=/system/bin/linker -L$(ANDROID_NDK_ROOT)/build/platforms/android-$(NDK_PLATFORM_VER)/arch-arm/usr/lib
    LDFLAGS += -nostdlib -lc

    all: $(APP)

    OBJS += $(APP).o
    $(APP): $(OBJS)
    $(CPP) $(LDFLAGS) -o $@ $^
    %.o: %.c
    $(CC) -c $(INCLUDE) $(CFLAGS) $< -o $@
    install: $(APP)
    $(ANDROID_SDK_ROOT)/tools/adb push $(APP) $(INSTALL_DIR)/$(APP)
    $(ANDROID_SDK_ROOT)/tools/adb shell chmod 777 $(INSTALL_DIR)/$(APP)
    shell:
    $(ANDROID_SDK_ROOT)/tools/adb shell
    run:
    $(ANDROID_SDK_ROOT)/tools/adb shell $(INSTALL_DIR)/$(APP)
    debug:
    $(GDB_CLIENT) $(APP)
    clean:
    @rm -f $(APP).o $(APP)


    test.c

    #include <stdio.h> // printf
    #include <stdlib.h> //exit

    int main(int argc, char **argv)
    {
    int i = 1;
    i+=2;

    printf("Hello, world (i=%d)!\n", i);

    exit(0);
    return 0;
    }

    Posted by kevino
    ,
    To use some native C codes in java application, we need to create a jni interface. Let's see how we can create the jni C header file using javah.


    1. Set up environment for build-up
    1.1. Open console windows
    1.2. Check whether javah is on your path. If not, refer below command.

    >set path=%ProgramFiles%\Java\jdk1.6.0_17\bin;%PATH%

    2. Compile java code. If you are using Eclipse and have no problem with compiling, just ignore the below line.

    >java
    Natives.java

    3. Create a JNI C header file
    3.1. Assuming that Navices.class file is located in the foler "bin\game\emulator\util\"

    >javah -classpath bin -jni game.emulator.util.Natives

    4. At last, we are ready to write the C function body.
    4.1. To get correct method and signature, javap is a right tool. Output of below line will show the name and signature of Java native entities which can be accessed in C.

    >javap -classpath bin -s -p game.emulator.util.
    Natives

    Other useful link: Calling Java methods

    Posted by kevino
    ,