웹rtc AppRTCMobie 프로젝트의 libjingle 분석peerconnection_so.so 동적 링크 라이브러리의 컴파일 프로세스 - 제1편
2718 단어 웹rtc 코드 연구음향 영상 개발 칼럼
ninja -C out/Debug AppRTCMobile
먼저 src 디렉토리에 있는 Build.gn은 전체 프로젝트의 컴파일 루트 디렉터리입니다.
if (rtc_build_examples) {
deps += [ "examples" ]
}
위의 코드는 examples 디렉터리에 있는 target으로 가야 한다고 알려 줍니다.
if (is_android) {
rtc_android_apk("AppRTCMobile") {
testonly = true
apk_name = "AppRTCMobile"`
android_manifest = "androidapp/AndroidManifest.xml"
deps = [
":AppRTCMobile_javalib",
":AppRTCMobile_resources",
"../rtc_base:base_java",
"//base:base_java",
]
shared_libraries = [ "../sdk/android:libjingle_peerconnection_so" ]
}
하하, 보셨습니까? 지금 우리는 AppRTCmobile이라는 프로젝트를 찾았습니다. 왜냐하면 우리가 주로 주목하는 것은 컴파일링을 순조롭게 하고libjingle를 생성하는 것이기 때문입니다peerconnection_so의 의존 관계.
그래서 우리가 미행해야 할 것은../sdk/android/BUILD.gn 파일의 libjinglepeerconnection_so target.
이 target은libjingle을 만드는 방법을 알려줄 거예요peerconnection_so.so
sdk/android/BUILD.gn
rtc_shared_library("libjingle_peerconnection_so") {
sources = [
"src/jni/jni_onload.cc",
]
suppressed_configs += [ "//build/config/android:hide_all_but_jni_onload" ]
configs += [ "//build/config/android:hide_all_but_jni" ]
deps = [
":libjingle_peerconnection_jni ",
":libjingle_peerconnection_metrics_default_jni",
"../../pc:libjingle_peerconnection",
"../../rtc_base:rtc_base",
]
output_extension = "so"
}
여기서 우리는 사실 명령을 간소화하고 명령을 통해 so동적 라이브러리를 직접 생성할 수 있다.
ninja -C out/Debug sdk/android:libjingle_peerconnection_so
libjingle_peerconnection_jni는 정적 라이브러리입니다.
libjingle_peerconnection_metrics_default_jni도 정적 라이브러리예요.
libjingle_peerconnection은source set
rtc_base 역시 정적 라이브러리
그러면 우리는 하나하나의 정적 라이브러리로부터 분석을 간소화할 수 있다