2014-03-29 2 views
0

나는 성공적으로이 튜토리얼 http://audioprograming.wordpress.com/2012/03/03/android-audio-streaming-with-opensl-es-and-the-ndk/Android OpenSL 예제가 libOpenSLES.so를로드하지 못합니까?

의 도움으로 안드로이드에서 OpenSL 라이브러리를 사용하는 안드로이드 NDK 응용 프로그램을 구축 opensl_io.h 명시된입니다 : 나는이 가지고 있는지 궁금

#include <SLES/OpenSLES.h> 
#include <SLES/OpenSLES_Android.h> 

내 장치에서 라이브러리가 /system/lib/libOpenSLES.so에로드되는 효과.

나는 라이브러리가 Android.mk에서이

LOCAL_LDLIBS := -llog -lOpenSLES 

을 언급하기 때문에 어떤 시점에서로드 할 수있다 생각하고 ndk doc는이 /system/lib/libOpenSLES.so이 아닌 다른이 -lOpenSLES에 사용되는 것을 의미 나에게 말한다

그래서 파일에 FileWatcher가있는 수퍼 유저 권한으로 앱을 작성했습니다.

그러나 내 OpenSL 예제를 사용하면 라이브러리에 손대지 않는 것처럼 보입니다.

/system/lib/libstdc++.so과 같은 다른 라이브러리의 경우 FileWatcher가로드 된 것을 볼 수 있습니다.

제 질문은 : /system/lib/libOpenSLES.so이 사용되지 않은 이유는 무엇입니까?

답변

0

실제로 에 libOpenSLES.so 연결 코드를 만들기 위해 할 -lOpenSLES#include 지시어를 추가하는 것만으로는 충분하지 않습니다. 라이브러리에서 하나의 함수를 호출하면 호출이 실행되지 않을지라도 최적화됩니다 (최적화 컴파일러가 완전히 삭제하는 블록에 넣지 않도록주의하십시오).

0

무엇이 오류입니까?. 오디오 앱을 만들 때이 라이브러리를 호출하는 데 문제가있었습니다. 문제는 내 자바 래퍼 파일에서 라이브러리를로드하지 못했습니다. 다음 코드를 사용하여 라이브러리를 Java 클래스에로드해야합니다.

static{ 
     System.loadLibrary("com_example_packageName"); 
    } 

packageName은 앱 패키지 이름이어야합니다.

+0

응답 해 주셔서 감사합니다. 그러나 내 Java 코드에는 이미이 코드가 있습니다 – IHeartAndroid

+0

OpenSL ES를 사용하는 ndk의 샘플 응용 프로그램이 Android.mk 파일에서 약간 다른 값을 가지고 있음을 발견했습니다. 그들은 사용합니다 LOCAL_LDLIBS + = -lOpenSLES –