Как я могу получить библиотеку webRTC, которая будет поддерживать как armv7, так и arm64 в iOS?
Библиотека iOS webRTC, поддерживающая armv7 и arm64
Ответы (3)
Везет вам. Я только что закончил интегрировать webrtc в свой проект на пару дней. Мое решение, как показано ниже:
Объедините все *.a, которые вы создали для armv7, в libWebRTC-armv7.a: используя командные строки, как показано ниже.
libtool -static -o src/out_ios_armv7/Release-iphoneos/libWebRTC-temp.a src/out_ios_armv7/Release-iphoneos/*.a
strip -S -x -o src/out_ios_armv7/Release-iphoneos/libWebRTC-armv7.a -r src/out_ios_armv7/Release-iphoneos/libWebRTC-temp.a
Объедините все *.a, которые вы создали для arm64, в libWebRTC-arm64.a:
libtool -static -o src/out_ios/Release-iphoneos/libWebRTC-temp.a src/out_ios/Release-iphoneos/*.a
strip -S -x -o src/out_ios/Release-iphoneos/libWebRTC-arm64.a -r src/out_ios/Release-iphoneos/libWebRTC-temp.a
Создайте свой libWebRTC с поддержкой как armv7, так и arm64:
lipo -create src/out_ios_armv7/Release-iphoneos/libWebRTC-armv7.a src/out_ios/Release-iphoneos/libWebRTC-arm64.a -output libWebRTC.a
P.s: Просто соберите свою библиотеку armv7 в отдельную папку с помощью arm64:
export GYP_GENERATORS="ninja"
export GYP_DEFINES="build_with_libjingle=1 build_with_chromium=0 libjingle_objc=1 OS=ios target_arch=armv7"
export GYP_GENERATOR_FLAGS="$GYP_GENERATOR_FLAGS output_dir=out_ios_armv7"
export GYP_CROSSCOMPILE=1
pushd src
gclient runhooks
ninja -C out_ios_armv7/Release-iphoneos AppRTCDemo
popd
Вы можете обратиться к нашему блогу:
Я написал сценарий оболочки для создания источников WebRTC в фреймворке (за исключением сигнальной библиотеки apprtc) для использования в iOS.
Если вы не умеете читать по-китайски, вы просто прочитали этот сценарий, встроенный в этот блог, и этого достаточно! Ага.
./build_webrtc.sh build_all
Может быть ошибка в устройстве armv7. эта ошибка была вызвана проблемой переполнения стека при декодировании VP8 в неоновой функции armv7.
Вы можете подтвердить этот патч, чтобы исправить сбой для него:
diff --git a/source/libvpx/vp8/common/arm/neon/vp8_subpixelvariance_neon.c b/source/libvpx/vp8/common/arm/neon/vp8_subpixelvariance_neon.c
index 8308d55..a66b6f5 100644
--- a/source/libvpx/vp8/common/arm/neon/vp8_subpixelvariance_neon.c
+++ b/source/libvpx/vp8/common/arm/neon/vp8_subpixelvariance_neon.c
@@ -1003,7 +1003,7 @@ unsigned int vp8_sub_pixel_variance8x8_neon(
const unsigned char *dst,
int dst_stride,
unsigned int *sse) {
- DECLARE_ALIGNED_ARRAY(kAlign16, uint8_t, temp2, kHeight8 * kWidth8);
+ DECLARE_ALIGNED_ARRAY(kAlign16, uint8_t, temp2, kHeight8PlusOne * kWidth8);
DECLARE_ALIGNED_ARRAY(kAlign16, uint8_t, fdata3, kHeight8PlusOne * kWidth8);
if (xoffset == 0) {
var_filter_block2d_bil_w8(src, temp2, src_stride, kWidth8, kHeight8,
Желаю, чтобы это могло помочь вам!
Студенты diverinedu.com только что преодолели и исправили эту ошибку.
спасибо phuongle, это действительно работает...
...но с изюминкой...
... как заметил Омер Вакас Хан, может быть случай, когда может появиться сообщение об ошибке (во время липосакции): обе библиотеки не могут иметь одинаковую структуру сильный>.
Я, конечно, пошел WTF...липо, что с тобой...они разного строения...Я ИХ ТАК ПОСТРОИЛ...
Но потом я решил перепроверить это:
- Я зашел в папку, где у меня была библиотека arm64_merged, и...
lipo -info lib's_name.a
Он сообщил, что относится к типу armv7 и arm64. Озадаченный, я тогда...
lipo -info *.a
... все библиотеки (из них 72) сообщили, что они имеют тип arm64, кроме 2...
libisac_fix.a
libisac_neon.a
По какой-то причине они были armv7. Ранее в тот же день я использовал клон webrtc «несколько дней назад». В то время я помню, что всегда получал только 70 библиотек. Но потом, по другим причинам, я решил
gclient sync
После этого я получил 72... поэтому я просто удалил ерунду libisac. Теперь 2 fat_libs были разных типов, и я мог успешно провести липосакцию.