Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/261.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何创建一个使用开源C项目的C++控制台应用程序_C++_C_Ffmpeg_Visual Studio 2017 - Fatal编程技术网

如何创建一个使用开源C项目的C++控制台应用程序

如何创建一个使用开源C项目的C++控制台应用程序,c++,c,ffmpeg,visual-studio-2017,C++,C,Ffmpeg,Visual Studio 2017,我一直在玩一个编译版本的。但是它有一些问题,在使用avio_close关闭打开的流的过程中,关闭它需要很长时间 我一直试图通过阅读实现来了解可能出现的问题,但没有找到任何东西 我想做的是,实际上有一个C++控制台应用程序,使用C文件,在使用断点运行代码时调试它们。p> 不幸的是,我找不到关于如何设置它的任何信息。仅仅在新的控制台应用程序中复制文件是不够的 提前感谢您的建议 编辑:我已经可以看到最后一票了。如果这个问题不适合这个网站,我会删除它。但是请告诉我在哪里张贴它的正确方向。虽然这是一个相当

我一直在玩一个编译版本的。但是它有一些问题,在使用avio_close关闭打开的流的过程中,关闭它需要很长时间

我一直试图通过阅读实现来了解可能出现的问题,但没有找到任何东西

我想做的是,实际上有一个C++控制台应用程序,使用C文件,在使用断点运行代码时调试它们。p> 不幸的是,我找不到关于如何设置它的任何信息。仅仅在新的控制台应用程序中复制文件是不够的

提前感谢您的建议

编辑:我已经可以看到最后一票了。如果这个问题不适合这个网站,我会删除它。但是请告诉我在哪里张贴它的正确方向。虽然这是一个相当普遍的问题,但我相信它是清楚的,并且已经提供了足够的信息

Edit2:是的,我有点不清楚我在用什么

我在Windows 10上使用VisualStudio社区2017来创建C++控制台应用程序。p> 编辑3:

我在使用DLL的控制台应用程序中使用源文件所采取的步骤

将FFmpeg主机的所有内容复制到我的控制台应用程序 将它们全部包含在C++控制台应用程序中 运行构建-需要花费很长时间,并且有无限多个构建错误>1000-可能与编译器相关 编辑4:

avio_close没有实际错误,只是关闭流的时间太长了。我在使用设置时发现,当设置fifo_size参数时,关闭流的速度要快得多,这取决于设置的值有多小。这有点道理,因为fifo_的大小与数据包的大小有关,但我还没有发现在代码中这个大小在哪里有影响

fifo_大小=单位 设置UDP接收循环缓冲区大小,以大小为188字节的数据包数表示。如果未指定,则默认为7*4096

Edit5:我还没有找到一种方法将开源ffmpeg项目编译成libs、dll和pdb。我是第一个需要这些文件的人吗? 到目前为止,唯一能够提供这些功能的工具是vcpkg。唯一的问题是它编译的是3.3.3版本,最新版本是4.0.2

我试图修改vcpkg\ports\ffmpeg\portfile.cmake文件以包含最新版本的ffmpeg,但它没有构建它


还有其他建议吗

为了使用调试器从源代码调试应用程序,您需要熟悉一些工具和工作流


首先,您需要知道如何构建应用程序。这通常通过以下方式实现:

$ ./configure
$ make
由于要调试,必须设置一些编译器标志,以指示编译器生成调试信息,调试器将使用这些信息将机器指令与相关的源代码行关联起来。对于FFMpeg,您只需将configure commad更改为:

$ ./configure --enable-debug
请查看$configure-help以查看所有选项,configure在本项目中有非常好的文档记录

运行make之后,您将拥有一个包含调试信息的可执行文件,然后您需要学习如何使用调试器。gdb调试器是使用最多的调试器,实际上是大多数GUI调试器的后端。有很多关于如何使用gdb的信息和教程,请在谷歌上搜索gdb教程并选择一个你认为最容易理解的

您需要学习的最相关的任务是如何设置断点、打印变量和堆栈跟踪


使用命令行界面(如普通gdb)进行调试有一些优点,但即使是老学究也必须承认GUI很方便。因此,作为最后一个建议,在您理解并与gdb工作流相协调之后,您可以搜索GUI调试器,甚至是一个完整的IDE,这肯定会使您的生活更轻松。

为了使用调试器从源代码调试应用程序,您需要与之协调使用一些工具和工作流


首先,您需要知道如何构建应用程序。这通常通过以下方式实现:

$ ./configure
$ make
由于您想调试,您必须设置一些编译器标志,这些标志将指示编译器生成调试信息,调试程序将使用这些信息将机器指令与源代码的相关行关联起来。对于FFMpeg,您只需将configure commad更改为:

$ ./configure --enable-debug
请查看$configure-help以查看所有选项,configure在本项目中有非常好的文档记录

运行make之后,您将拥有一个包含调试信息的可执行文件,然后您需要学习如何使用调试器。gdb调试器是最常用的调试器,并且 实际上是大多数GUI调试器的后端。有很多关于如何使用gdb的信息和教程,请在谷歌上搜索gdb教程并选择一个你认为最容易理解的

您需要学习的最相关的任务是如何设置断点、打印变量和堆栈跟踪


使用命令行界面(如普通gdb)进行调试有一些优点,但即使是老学究也必须承认GUI很方便。因此,最后一点建议是,在您了解并熟悉gdb工作流之后,您可以搜索GUI调试器,甚至是完整的IDE,这肯定会让您的生活更加轻松。

您可以使用github的开源软件包vcpkg轻松地构建包括ffmpeg在内的许多开源项目。vcpkg最近还提供了对非windows平台的支持,请查看


Powershell提示符上只需一行命令。\vcpkg安装ffmpeg即可。与往常一样,vs控制台项目也可以进行调试。

您可以使用github的开源软件包vcpkg来构建包括ffmpeg在内的许多开源项目,而无需任何麻烦。vcpkg最近还提供了对非windows平台的支持,请查看

Powershell提示符上只需一行命令。\vcpkg安装ffmpeg即可。与往常一样,vs控制台项目也可以进行调试。

我最终使用了vcpkg

作为构建此规范的指南,不知道它是否适用于其他开源项目包:

1下载并完成自述文件中描述的安装过程

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安装ffmpeg

您现在应该有一个带有DLL、PDB、LIB和includes文件夹的FFMPEG 4.0.2调试和发布版本

不完全确定这个过程是否正确,但我的项目运行良好,现在我可以调试它了

我最终使用了vcpkg

作为构建此规范的指南,不知道它是否适用于其他开源项目包:

1下载并完成自述文件中描述的安装过程

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安装ffmpeg

您现在应该有一个带有DLL、PDB、LIB和includes文件夹的FFMPEG 4.0.2调试和发布版本


不完全确定这个过程是否正确,但我的项目运行良好,现在我可以调试它了

您是自己编译ffmpeg还是使用其他人编译的二进制文件?听起来好像您缺少ffmpeg的调试信息,有时解决这个问题的最简单方法是自己编译项目。使用其他人编译的二进制文件。是的,调试信息会有所帮助,但也没有找到构建项目的方法。但是,单步执行代码将是理想的。如果您显示错误消息并解释它是如何不起作用的,这将有所帮助。您的问题中的一个问题是,如果不解释问题出在哪里,那么您的问题仅限于那些制作了使用ffmpeg的控制台应用程序的人,他们在设置它时遇到了某种类型的问题,他们记得并且能够克服此问题。既然你说的是console,我假设你说的是windows而不是linux,你使用的是Visual Studio而不是clang或gcc。顺便说一句,请注意avio_close可能需要根据流类型执行大量工作。这可能涉及写入大量元数据和/或对流数据进行检查求和等。因此,我不确定是否有任何错误。@drescherjm是的,您是正确的。我应该指定我正在使用什么以及在什么操作系统上。我也更新了这个问题。你是自己编译ffmpeg还是使用别人编译的二进制文件?听起来好像您缺少ffmpeg的调试信息,有时解决这个问题的最简单方法是自己编译项目。使用其他人编译的二进制文件。是的,调试信息会有所帮助,但也没有找到构建项目的方法。然而,逐步通过代码将是理想的
p如果您显示错误消息并解释它是如何不工作的。您的问题中的一个问题是,如果不解释问题出在哪里,那么您的问题仅限于那些制作了使用ffmpeg的控制台应用程序的人,他们在设置它时遇到了某种类型的问题,他们记得并且能够克服此问题。既然你说的是console,我假设你说的是windows而不是linux,你使用的是Visual Studio而不是clang或gcc。顺便说一句,请注意avio_close可能需要根据流类型执行大量工作。这可能涉及写入大量元数据和/或对流数据进行检查求和等。因此,我不确定是否有任何错误。@drescherjm是的,您是正确的。我应该指定我正在使用什么以及在什么操作系统上。我也更新了这个问题。这通常是通过运行此库的说明来实现的。感谢您的清晰解释+1,但我从未尝试过您刚才所说的任何内容。这需要一段时间,直到我建立了一个ubuntu机器,并通过一切。正如我在编辑中所解释的,我在Windows 10上使用VS 2017。我回到了这种方法,因为vcpkg只提供了旧版本的ffmpeg。难道没有办法像vpckg那样构建克隆存储库吗?意思是给我图书馆,包括文件夹和DLL+PDB。这通常是通过运行此库的说明来实现的。感谢您的清晰解释+1,但我从未尝试过您刚才所说的任何内容。这需要一段时间,直到我建立了一个ubuntu机器,并通过一切。正如我在编辑中所解释的,我在Windows 10上使用VS 2017。我回到了这种方法,因为vcpkg只提供了旧版本的ffmpeg。难道没有办法像vpckg那样构建克隆存储库吗?意思是给我图书馆,包括文件夹和DLL+PDB。谢谢。我将试一试,因为这是首先尝试的最简单的解决方案。运行vcpkg非常容易构建,现在我有了带有DLL和PDB的ffmpeg调试版本,但现在如何进行调试?加载一个测试程序,检查是否可以错误地调用某些ffmpeg库。您应该能够正常调试。谢谢。我将试一试,因为这是首先尝试的最简单的解决方案。运行vcpkg非常容易构建,现在我有了带有DLL和PDB的ffmpeg调试版本,但现在如何进行调试?加载一个测试程序,检查是否可以错误地调用某些ffmpeg库。您应该能够正常调试。