Фреймворк Swift с внутренним модулем C - неопределенные символы для архитектуры arm64 - PullRequest
0 голосов
/ 29 марта 2020

Я создаю проект фреймворка Swift с использованием внутреннего модуля FFmpeg.

Шаги:

  1. Загрузка исходного кода FFmpeg с официального сайта.
  2. Сборка с помощью Сценарий сборки здесь: https://github.com/kewlbear/FFmpeg-iOS-build-script
  3. Скопировать собранный файл в проект
  4. Создать файл module.modulemap, его содержимое:
module FFmpeg [system][extern_c] {

    header "include/libavcodec/avcodec.h"
    header "include/libavdevice/avdevice.h"
    header "include/libavfilter/avfilter.h"
    header "include/libavformat/avformat.h"
    header "include/libavutil/avutil.h"
    header "include/libswresample/swresample.h"
    header "include/libswscale/swscale.h"

    export *
}

Дерево проекта:

enter image description here

Установите пути импорта для параметров проекта и целевых параметров на $(SRCROOT)/MediaToolkit/Libraries/FFmpeg/** Мой исходный код:
import Foundation
import FFmpeg

public class MediaToolkit {
    public init(){}

    public func hello() {
        print("AVFMT_NOFILE: \(AVFMT_NOFILE)")
        avformat_network_init()
    }
}

При сборке я получил ошибку

Undefined symbols for architecture arm64:
  "_avformat_network_init", referenced from:
      MediaToolkit.MediaToolkit.hello(Swift.String) -> () in MediaToolkit.o
ld: symbol(s) not found for architecture arm64
clang: error: linker command failed with exit code 1 (use -v to see invocation)

Если удалить строку avformat_network_init(), будет напечатано AVFMT_NOFILE: 1

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...