如何创建一个使用开源c项目的c++控制台应用程序
How can I create a c++ console application which makes use of an open source c project
我一直在玩编译版本的https://github.com/FFmpeg/FFmpeg.但是它也有一些问题,在使用avio_close
关闭打开的流的过程中(关闭它需要很长时间)。
我一直试图通过阅读实现来了解可能出现的问题,但什么都找不到。
我想做的是,实际上有一个C++控制台应用程序,它使用C文件,并在运行代码时调试它们(使用断点等)。
不幸的是,我找不到任何关于如何设置它的信息。仅仅在一个新的控制台应用程序中复制文件是不够的。
提前感谢您的任何建议。
编辑:我已经可以看到最后的投票了。如果这个问题不适合这个网站,我会删除它。但请告诉我在哪里发布它的正确方向。虽然这是一个相当普遍的问题,但我相信它是明确的,并且已经提供了足够的信息。
伊迪丝2:是的,我有点不清楚我在用什么。
我正在使用Windows 10上的Visual Studio Community 2017来创建C++控制台应用程序。
第3版:
在使用DLL的控制台应用程序中使用源文件所采取的步骤。
- 将FFmpeg主机的所有内容复制到我的控制台应用程序
- 在c++控制台应用程序项目中包括所有这些
- 运行一个构建-需要很长时间,并且有无限的构建错误(>1000)-可能与编译器有关
第4版:
我对avio_close
没有实际错误,只是关闭流需要太长时间。我在玩这些设置时发现,当设置了fifo_size
参数时,关闭流的速度会快得多,这取决于设置的值有多小。这有点道理,因为fifo_size
与数据包大小有关,但我还没有发现这个大小在代码中的影响。
fifo_size=单位设置UDP接收循环缓冲区大小,表示为188字节大小的数据包数。如果未指定,则默认为7*4096。
Edit5:我仍然没有找到将开源ffmpeg项目编译成libs、dll和pdb的方法。我是第一个需要这样的文件的人吗(似乎不现实)?到目前为止,唯一能够提供这些功能的工具是vcpkg
。唯一的问题是它编译了3.3.3版本,最新版本是4.0.2
我试图修改vcpkgportsffmpegportfile.cmake
文件以包含最新版本的ffmpeg,但它没有构建它。
还有其他建议吗?
为了使用调试器从源代码调试应用程序,您需要适应一些工具和工作流。
首先,您需要知道如何构建应用程序。这通常通过运行来实现
$ ./configure
$ make
由于要调试,必须设置一些编译器标志,这些标志将指示编译器生成调试信息,调试器将使用这些信息将机器指令与源代码的相关行关联起来。在FFMpeg的情况下,您只需要将配置命令更改为:
$ ./configure --enable-debug
请查看$ configure --help
以查看所有选项,configure
在本项目中有非常好的记录。
在运行make
之后,您将有一个包含调试信息的可执行文件,然后您需要学习如何使用调试器。gdb
调试器是使用最多的调试器,实际上是大多数GUI调试器的后端。有很多关于如何使用gdb的信息和教程,请在谷歌上搜索gdb tutorial
,然后选择你觉得最容易理解的。
您需要学习的最相关的任务是如何设置断点、打印变量和堆栈跟踪。
使用像普通gdb这样的命令行界面进行调试有一些优势,但即使是老派人士也必须承认GUI派上了用场。因此,作为最后的建议,在您理解并适应gdb工作流之后,您可以搜索一个GUI调试器,甚至一个完整的IDE,这肯定会让您的生活变得更轻松。
我最终使用了vcpkg
。
作为构建这个特定(不知道它是否适用于其他开源项目)包的指南:
1) 下载vcpkg并完成自述文件中描述的安装过程
2) 转到
。。\vcpkg\ports\ffmpeg\
并编辑portfile.cmake
文件。
默认情况下,vcpkg将构建3.3.3版本的ffmpeg,并使用
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、库和includes文件夹的FFMPEG 4.0.2调试和发布版本。
不完全确定这个过程是否正确,但我的项目运行良好,现在我可以调试它了
您可以使用github的开源软件包vcpkg轻松构建包括ffmpeg在内的许多开源项目。vcpkg最近也支持非windows平台,请查看。
只需要在Powershell提示符.vcpkg install ffmpeg
上执行一个单行命令。和往常一样,vs控制台项目也可以进行调试。
- 在C 开源项目中包括单位测试的最佳方法
- 哪些带有开源的项目您可以看到高级内存管理的使用
- 在开源项目中存储 OAuth 机密
- 面向学生的开源项目
- 为什么我不能编译这个开源项目
- 将开源 JniLibs 合并到自己的 android 项目中
- 开源 Linux 服务器项目
- 开源项目中的未知类型名称
- 尝试将使用 X11 的基于 Linux 的开源C++项目移植到 OSX 中。我已经安装了XQuartz:现在怎么办?
- 如何用IDE组织开源C++项目在github上共享
- 在开源项目中找不到功能Get_AacEncoder,即使在系统中也是如此
- 使用cmake的开源项目
- 在旧的开源项目中错误地构建boost spirit代码
- 哪些是具有优秀编码风格的开源c++项目?
- 使用cppUnit的开源项目
- 寻找Qt开源项目,类似于Windows Paint
- 有流行的用c++编写的开源项目吗?
- 我应该如何管理C或C++开源项目中的依赖关系
- NetBeans - 如何使用 netbeans 打开 Chromium 开源项目
- c++是一个开源项目吗?是哪个社区开发的?