Запуск приложения Flutter с собственным кодом C++ работает в режиме отладки, но не в режиме выпуска.IOS

Программируем под IOS
Ответить
Anonymous
 Запуск приложения Flutter с собственным кодом C++ работает в режиме отладки, но не в режиме выпуска.

Сообщение Anonymous »

Я написал собственный код C++ и скомпилировал различные библиотеки для iOS и Android. Пока я работал в режиме отладки, проблем не было. Но когда я попытался запустить свое приложение в режиме выпуска, оно вылетает при запуске.
Я получил это сообщение об ошибке от терминала XCode:

Код: Выделить всё

dyld[2544]: Library not loaded: @rpath/Frameworks/libavcodec.framework/libavcodec
Referenced from:  /private/var/containers/Bundle/Application/EF79B901-4040-41F7-864D-D413A9FCB9EC/Runner.app/Runner
Reason: tried: '/usr/lib/swift/Frameworks/libavcodec.framework/libavcodec' (no such file, not in dyld cache), '/private/preboot/Cryptexes/OS/usr/lib/swift/Frameworks/libavcodec.framework/libavcodec' (no such file), '/private/var/containers/Bundle/Application/EF79B901-4040-41F7-864D-D413A9FCB9EC/Runner.app/Frameworks/Frameworks/libavcodec.framework/libavcodec' (no such file), '/private/var/containers/Bundle/Application/EF79B901-4040-41F7-864D-D413A9FCB9EC/Runner.app/Frameworks/Frameworks/libavcodec.framework/libavcodec' (no such file), '/usr/lib/swift/Frameworks/libavcodec.framework/libavcodec' (no such file, not in dyld cache), '/private/preboot/Cryptexes/OS/usr/lib/swift/Frameworks/libavcodec.framework/libavcodec' (no such file), '/private/var/containers/Bundle/Application/EF79B901-4040-41F7-864D-D413A9FCB9EC/Runner.app/Frameworks/Frameworks/libavcodec.framework/libavcodec' (no such file), '/private/var/containers/Bundle/Application/EF79B901-4040-41F7-864D-D413A9FCB9EC/Runner.app/Frameworks/Frameworks/libavcodec.framework/libavcodec' (no such file)
Library not loaded: @rpath/Frameworks/libavcodec.framework/libavcodec
Referenced from:  /private/var/containers/Bundle/Application/EF79B901-4040-41F7-864D-D413A9FCB9EC/Runner.app/Runner
Reason: tried: '/usr/lib/swift/Frameworks/libavcodec.framework/libavcodec' (no such file, not in dyld cache), '/private/preboot/Cryptexes/OS/usr/lib/swift/Frameworks/libavcodec.framework/libavcodec' (no such file), '/private/var/containers/Bundle/Application/EF79B901-4040-41F7-864D-D413A9FCB9EC/Runner.app/Frameworks/Frameworks/libavcodec.framework/libavcodec' (no such file), '/private/var/containers/Bundle/Application/EF79B901-4040-41F7-864D-D413A9FCB9EC/Runner.app/Frameworks/Frameworks/libavcodec.framework/libavcodec' (no such file), '/usr/lib/swift/Frameworks/libavcodec.framework/libavcodec' (no such file, not in dyld cache), '/private/preboot/Cryptexes/OS/usr/lib/swift/Frameworks/libavcodec.framework/libavcodec' (no such file), '/private/var/containers/Bundle/Application/EF79B901-4
dyld config: DYLD_LIBRARY_PATH=/usr/lib/system/introspection DYLD_INSERT_LIBRARIES=/usr/lib/libLogRedirect.dylib:/usr/lib/libBacktraceRecording.dylib:/usr/lib/libMainThreadChecker.dylib:/usr/lib/libRPAC.dylib:/System/Library/PrivateFrameworks/GPUToolsCapture.framework/GPUToolsCapture:/usr/lib/libViewDebuggerSupport.dylib
Library not loaded: @rpath/Frameworks/libavcodec.framework/libavcodec
Referenced from:  /private/var/containers/Bundle/Application/EF79B901-4040-41F7-864D-D413A9FCB9EC/Runner.app/Runner
Reason: tried: '/usr/lib/swift/Frameworks/libavcodec.framework/libavcodec' (no such file, not in dyld cache), '/private/preboot/Cryptexes/OS/usr/lib/swift/Frameworks/libavcodec.framework/libavcodec' (no such file), '/private/var/containers/Bundle/Application/EF79B901-4040-41F7-864D-D413A9FCB9EC/Runner.app/Frameworks/Frameworks/libavcodec.framework/libavcodec' (no such file), '/private/var/containers/Bundle/Application/EF79B901-4040-41F7-864D-D413A9FCB9EC/Runner.app/Frameworks/Frameworks/libavcodec.framework/libavcodec' (no such file), '/usr/lib/swift/Frameworks/libavcodec.framework/libavcodec' (no such file, not in dyld cache), '/private/preboot/Cryptexes/OS/usr/lib/swift/Frameworks/libavcodec.framework/libavcodec' (no such file), '/private/var/containers/Bundle/Application/EF79B901-4
dyld config: DYLD_LIBRARY_PATH=/usr/lib/system/introspection DYLD_INSERT_LIBRARIES=/usr/lib/libLogRedirect.dylib:/usr/lib/libBacktraceRecording.dylib:/usr/lib/libMainThreadChecker.dylib:/usr/lib/libRPAC.dylib:/System/Library/PrivateFrameworks/GPUToolsCapture.framework/GPUToolsCapture:/usr/lib/libViewDebuggerSupport.dylib
Очевидно, он не может найти структуру libavcodec.
Я скомпилировал libavcodec и т. д., используя эти инструкции:
https://doc.qt.io/qt-6/qtmultimedia-bui ... g-ios.html
Я немного озадачен тем, что все работает в режиме отладки, но не в режиме выпуска.
Это есть ли что-то с путями поиска в моем файле Native_library.podspec, которое работает только в режиме отладки?
Вот мой файл `.podspec`:

Код: Выделить всё

#
# To learn more about a Podspec see http://guides.cocoapods.org/syntax/podspec.html.
# Run `pod lib lint native_library.podspec` to validate before publishing.
#
Pod::Spec.new do |s|
s.name             = 'native_library'
s.version          = '0.0.1'
s.summary          = 'A new Flutter plugin project.'
s.description      =  'email@example.com' }
s.source           = { :path => '.' }
s.source_files = 'Classes/**/*'
# Only expose the C-compatible API header to Swift/ObjC. Keep C++ headers private.
s.public_header_files = 'Classes/Interfaces/native_lib.h'

s.dependency 'Flutter'
s.platform = :ios, '13.0'
s.compiler_flags = '-O3'

# Flutter.framework does not contain a i386 slice.
s.pod_target_xcconfig = {
'DEFINES_MODULE' => 'YES',
'EXCLUDED_ARCHS[sdk=iphonesimulator*]' => ['i386'],
'HEADER_SEARCH_PATHS' => '$(inherited) "${PODS_TARGET_SRCROOT}/Classes/Interfaces"'
}
s.swift_version = '5.0'

s.preserve_paths = [
'Frameworks/opencv2.xcframework',
'Frameworks/onnxruntime.xcframework',
'Frameworks/libavcodec.xcframework',
'Frameworks/libavutil.xcframework',
'Frameworks/libavformat.xcframework',
'Frameworks/libswresample.xcframework',
'Frameworks/libswscale.xcframework',
'Frameworks/libavfilter.xcframework',
'Frameworks/libavdevice.xcframework',
]
s.vendored_frameworks = [
'Frameworks/opencv2.xcframework',
'Frameworks/onnxruntime.xcframework',
'Frameworks/libavcodec.xcframework',
'Frameworks/libavutil.xcframework',
'Frameworks/libavformat.xcframework',
'Frameworks/libswresample.xcframework',
'Frameworks/libswscale.xcframework',
'Frameworks/libavfilter.xcframework',
'Frameworks/libavdevice.xcframework',
]
s.xcconfig = { 'OTHER_LDFLAGS' => '-framework opencv2 -framework onnxruntime -framework libavcodec -framework libavutil -framework libavformat -framework libswresample -framework libswscale -framework libavfilter -framework libavdevice' }

s.frameworks = 'AVFoundation'
s.libraries = 'c++'

# If your plugin requires a privacy manifest, for example if it uses any
# required reason APIs, update the PrivacyInfo.xcprivacy file to describe your
# plugin's privacy impact, and then uncomment this line. For more information,
# see https://developer.apple.com/documentation/bundleresources/privacy_manifest_files
# s.resource_bundles = {'native_library_privacy' => ['Resources/PrivacyInfo.xcprivacy']}
end
Или это связано с тем, как создается мой xcframework? Мне приходилось делать много вещей вручную по сравнению с opencv2 и onnxruntime, где существовали сценарии генерации библиотек для iOS, как устройства, так и симулятора.
Я попробовал сравнить opencv2 и libavcodec, используя

Код: Выделить всё

lipo -info libname
libavcoded нежирный, а opencv2 — толстый. Но оба были Arm64. Поскольку libavcodec даже не найден, я подозреваю, что что-то происходит с путями поиска в режиме выпуска.
Обновление
Я проверил более раннюю версию, в которой я использую только opencv и onnxruntime. Затем он запускается на устройстве в режиме выпуска.
Может ли быть, что opencv также содержит библиотеки ffmpeg, такие как libavcodec?
Или может быть что-то не так в настройке моего xcframework для libavcodec?
Есть идеи о том, как выяснить, в чем заключается ошибка?

Подробнее здесь: https://stackoverflow.com/questions/798 ... in-release
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «IOS»