Как я могу создать консольное приложение c ++, которое использует проект c открытым исходным кодом - PullRequest
0 голосов
/ 28 сентября 2018

Я играл с скомпилированной версией https://github.com/FFmpeg/FFmpeg. Но у нее есть некоторые проблемы, при закрытии открытого потока с использованием avio_close (для его закрытия требуется очень много времени).

Я пытался понять, что может пойти не так, прочитав реализацию, но не смог ничего найти.

Что я хотел бы сделать, так это на самом деле иметь консольное приложение C ++, которое использует файлы c, и отлаживать их во время выполнения кода (с использованием точек останова и т. Д.).

К сожалению, я не могу найти информацию о том, как его настроить.Простого копирования файлов в новом консольном приложении недостаточно.

Заранее спасибо за любые предложения.

Редактировать: я уже вижу итоговое голосование.Если этот вопрос не подходит для данного сайта, я его удалю.Но, пожалуйста, укажите мне правильное направление, где разместить это сообщение. Хотя это довольно общий вопрос, я считаю, что он ясен и достаточно информации предоставлено.

Edit2: Да, мне было немного неясно, что я использую.

Я использую Visual Studio Community 2017 в Windows 10 для создания консольного приложения C ++.

Edit3:

Шаги, которые я предпринял, используя исходные файлы в моем консольном приложении, которое использовало библиотеки DLL.

  1. Скопировать все содержимое FFmpeg-master в мое консольное приложение
  2. Включить все из них в проект консольного приложения c ++
  3. Запустить сборку - требуетсянавсегда и имеет бесконечные ошибки сборки (> 1000) - возможно, это связано с компилятором

Edit4:

У меня нет реальных ошибок с avio_close, просто слишком много времени, чтобы закрыть поток,Что я узнал, поиграв с настройками, так это то, что когда установлен параметр fifo_size, закрытие потока происходит намного быстрее, в зависимости от того, как мало заданное значение.И это имеет смысл, поскольку fifo_size относится к размеру пакета, но я не выяснил, где в коде этот размер влияет.

fifo_size = units Установить размер циклического буфера приема UDP, выраженный в количестве пакетов размером 188 байт.Если не указано, по умолчанию используется значение 7 * 4096.

Edit5: Я до сих пор не нашел способа скомпилировать проект ffmpeg с открытым исходным кодом в libs, dll и pdbs.Я первый нуждаюсь в таких файлах (кажется нереальным)?Единственный инструмент, способный доставить это, - vcpkg.Единственная проблема заключается в том, что он компилирует версию 3.3.3, а последняя - 4.0.2.

Я пытался изменить файл vcpkg\ports\ffmpeg\portfile.cmake, чтобы он включал последнюю версию ffmpeg, но он не собирался.

Есть ли другие предложения?

Ответы [ 3 ]

0 голосов
/ 28 сентября 2018

Вы можете использовать vcpkg, упаковщик с открытым исходным кодом, из github для создания многих проектов с открытым исходным кодом, включая ffmpeg без каких-либо хлопот.vcpkg недавно также предоставил поддержку для платформ, отличных от Windows, зацените это.

В командной строке Powershell .\vcpkg install ffmpeg имеется одна однострочная команда, это все, что нужно.Как обычно, консольный проект против может быть также подвергнут отладке.

0 голосов
/ 02 октября 2018

В итоге я использовал vcpkg.

В качестве руководства для создания этого специфического (как и не предполагалось, будет ли оно работать так же для других проектов с открытым исходным кодом):

1) Загрузите vcpkg и выполните процесс установки, описанный в файле README

2) Перейдите по адресу

.. \ vcpkg \ports \ ffmpeg \

и отредактируйте файл portfile.cmake.

По умолчанию vcpkg создает версию ffmpeg 3.3.3 и использует

vcpkg_download_distfile(ARCHIVE
URLS "http://ffmpeg.org/releases/ffmpeg-3.3.3.tar.bz2"
FILENAME "ffmpeg-3.3.3.tar.bz2"
SHA512 1cc63bf73356f4e618c0d3572a216bdf5689f10deff56b4262f6d740b0bee5a4b3eac234f45fca3d4d2da77903a507b4fba725b76d2d2070f31b6dae9e7a2dab
)

Измените его на

vcpkg_download_distfile(ARCHIVE
    URLS "http://ffmpeg.org/releases/ffmpeg-4.0.2.tar.bz2"
    FILENAME "ffmpeg-4.0.2.tar.bz2"
    SHA512 92a3bedcd070df72b26dbe3ebf4a3faea0a02289fbefdb6a6c73d65801cf60a7e11cd832d29ab46b7749a1ffd0a31505cf75bb46bd01ea06423b454ca04e9b7b
)

Это позволит загрузить последнюю версию ffmpeg.Чтобы сборка работала, вы также должны прокомментировать следующие строки:

if("ffserver" IN_LIST FEATURES)
    set(OPTIONS "${OPTIONS} --enable-ffserver")
else()
    set(OPTIONS "${OPTIONS} --disable-ffserver")
endif()

Я предполагаю, что начиная с версии 3.3.3 эта опция была удалена / отключена и больше не работает.

3) Выполнить (это займет некоторое время)

. \ Vcpkg install ffmpeg

Теперь у вас должна быть отладка и выпуск 4.0.2версия FFMPEG с библиотеками DLL, PDB, libs и включает в себя папки.

Не совсем уверен, что этот процесс был правильным, но мой проект работает нормально, и теперь я могу его отладить.

0 голосов
/ 28 сентября 2018

Существуют некоторые инструменты и рабочие процессы, с которыми вам нужно иметь дело, чтобы отлаживать приложение из исходного кода с помощью отладчика.

Сначала вам нужно знать, как создать приложение.Обычно это достигается с помощью команды:

$ ./configure
$ make

Поскольку вы хотите отлаживать, вы должны установить некоторые флаги компилятора, которые будут указывать компилятору создавать отладочную информацию, которая будет использоваться отладчиком для привязки машинных инструкций ксоответствующие строки исходного кода.В случае FFMpeg вам просто нужно изменить запятую конфигурации на:

$ ./configure --enable-debug

Пожалуйста, посмотрите на $ configure --help, чтобы увидеть все опции, configure чрезвычайно хорошо задокументировано в этом проекте.

После запуска make у вас будет исполняемый файл с отладочной информацией, затем вам нужно научиться пользоваться отладчиком.Отладчик gdb является наиболее используемым и на самом деле является бэкендом большинства отладчиков GUI.Существует множество информации и учебных пособий о том, как использовать gdb, выполните поиск в Google по запросу gdb tutorial и выберите тот, который вы считаете наиболее понятным.

Наиболее важные задачи, которые вам необходимо изучить, - это настройкадо точек останова, печати переменных и трассировки стека.

Отладка с использованием интерфейса командной строки, такого как обычный gdb, имеет некоторые преимущества, но даже люди старой школы должны признать, что GUI пригодится.Итак, в качестве последнего совета, после того, как вы поймете и освоитесь с рабочим процессом gdb, вы можете искать отладчик с графическим интерфейсом или даже полную IDE, которая, несомненно, сделает вашу жизнь намного проще.

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