Linux 音视频开发杂记之一-环境配置使用vscode

2023-11-07

开发环境

开发环境选择window10+Visual Studio Code + ubuntu20.64 虚拟机

一Windows 安装

1.安装git for windows

安装过程直接下一步。
主要原因是windows OpenSSH在vs code 下不可用, 安装后需要在环境变量的path/path配置一下git

在这里插入图片描述

2.安装Visual Studio Code

安装过程直接下一步。

3.vscode 安装插件

1 Remote Development
2 C/C++ Themes
3 C/C++ for Visual Studio Code
4 WSL ( Windows Subsystem for Linux )

以上都是必须安装的,否则调试的时候提示cppdbg错误

二 Ubuntu安装

安装编译环境

sudo apt-get install build-essential

安装ssh gdb gdbserver服务

sudo apt-get install openssh-server gdb gdbserver

启动ssh服务

sudo service ssh start

查询ssh服务是否启动

sudo service ssh status

三 vscode连接到ubuntu

四 ubuntu工作区文件目录

建立第一级目录

建立XDEV或者其他,包含_Bin,_Include两个目录,_Bin为输出路径,所有本项目的so,out都输出到该目录一下。

建立工程目录

考虑工程目录可能跨平台使用,故建立如图所示目录,目前只有_Linux有效,如图所示
在这里插入图片描述
其中:
_Linux放Makefile
_Win32放VC++工程文件
src放代码文件.cpp .h

Makefile编写.

参考网上例子,我编写以下通用模板,可以同时编译动态库,可执行文件,包括debug,release,如编译debug只需在编译指定debug=y 例如 make debug=y

CROSS=
CC:=$(CROSS)gcc
CXX:=$(CROSS)/usr/bin/g++
#****************************************************************************
# Include paths
#****************************************************************************
INCS :=-I../../_Include/
#****************************************************************************
# Libs
#****************************************************************************
LIBS:=
#EX:
#LIBS:= -L/home/ubuntu/workzt/ffmpegTomp4/aarch64_lib/ -lavformat -lavcodec -lavfilter -lswscale -lavutil -lswresample -lavdevice -lm -pthread

#****************************************************************************
# Out path paths
#****************************************************************************
OUT_PATH:=../../_Bin/
#****************************************************************************
# Target filename
#****************************************************************************
FILENAME:=libxkernel
#****************************************************************************
# Target file ext-name
#****************************************************************************
EXTNAME:=.so

#****************************************************************************
# ggc args
#****************************************************************************
CFLAGS:=-Wall -O0 -DNDEBUG -Wno-unknown-pragmas -Wno-format -Wno-missing-braces -Wno-maybe-uninitialized  -Wno-unused-but-set-variable 
#****************************************************************************
# g++ args
#****************************************************************************
CXXFLAGS:=-w -std=c++11 -O0 -DNDEBUG -Wno-unknown-pragmas -Wno-format -Wno-missing-braces -Wno-maybe-uninitialized  -Wno-unused-but-set-variable 

#****************************************************************************
# debug options
#****************************************************************************
ifeq ($(debug), y)
$(warning builid as debug)
CFLAGS += -g 
CXXFLAGS+= -g 
FILEFULLNAME:=$(FILENAME)d$(EXTNAME)
#if debug xxx.xx->xxxd.xx
else
$(warning builid as release)
FILEFULLNAME:=$(FILENAME)$(EXTNAME)
endif

#****************************************************************************
# lib or app
#****************************************************************************
ifeq ($(EXTNAME), .so)
$(warning  builid as lib)
CXXFLAGS += -shared 
CXXFLAGS += -fPIC 
else
$(warning builid as app)
endif


#****************************************************************************
# Source files
#****************************************************************************


#SRCS:=$(wildcard ../src/*.cpp)
#SRCS+=$(wildcard ../src/*.c)

SRCS_ALL:=$(shell find ../src -name "*.cpp" -o -name "*.c") 
#过滤的文件,指定哪些源文件不需要编译
FilterFiles_CPP :=
FilterFiles_C := 
FilterFiles := $(FilterFiles_C) $(FilterFiles_CPP)
FilterFiles := $(addprefix %/,$(FilterFiles))
SRCS := $(filter-out $(FilterFiles), $(SRCS_ALL))


#定义宏
DEF=


#****************************************************************************
# Objects
#****************************************************************************
OBJ:=$(patsubst %.c, %.o, $(patsubst %.cpp, %.o, $(SRCS))) 


#****************************************************************************
# Target
#****************************************************************************

TARGET = $(OUT_PATH)$(FILEFULLNAME)


PHONY :  all clean
all: $(TARGET)
$(TARGET):$(OBJ) 
	$(CXX) $(CXXFLAGS) -o $@ $(OBJ) $(LIBS)
%.o : %.c
	echo "compiling $< ..."
	echo $(TARGET)
	@($(CC) -fPIC -c $(CFLAGS) $(INCS)  $(LIBS) $< -o $@)
%.o : %.cpp
	$(CXX) -fPIC -c $(CXXFLAGS) $(DEF) $(INCS)  $(LIBS) $< -o $@ 
clean :
	@echo "remove temp files(obj)..."
	@rm $(OBJ)
	@echo "Compilation succeeded! out file is:" $(TARGET) 


五 vscode 工作区配置

tasks.json

{
	// 有关 tasks.json 格式的文档,请参见
	// https://go.microsoft.com/fwlink/?LinkId=733558
	//
	"version": "2.0.0",
	"tasks": [
		{
			"type": "shell",
			"label": "make file",
			"command": "make",
			"args": [],
			"options": {
				"cwd": "${workspaceFolder}/_Linux"
				//指定Makefile所在的路径
			},
			"group": "build"
		},
		{
			"type": "shell",
			"label": "make file debug",
			"command": "make",
			"args": [
				"debug=y"	
				//指定debug模式
			],
			"options": {
				"cwd": "${workspaceFolder}/_Linux"
				//指定Makefile所在的路径
			},
			"group": "build"
		},
		{ //删除二进制文件
			"type": "shell",
			"label": "delete output file",
			"command": "rm",
			"args": [
				"${fileDirname}/${fileBasenameNoExtension}"
			],
			"presentation": {
				"reveal": "silent", //删除过程不切换终端(专注程序输出)
			}
		}
	]
}

tasks.json文件 task数组包含3个元素,分别为编译release,编译debug,和删除临时文件。

launch.json

tasks.json修改完毕后,我们要在launch.json 建立对于的任务,配置如下。

{
    // 使用 IntelliSense 了解相关属性。 
    // 悬停以查看现有属性的描述。
    // 欲了解更多信息,请访问: https://go.microsoft.com/fwlink/?linkid=830387
    "version": "0.2.0",
    "configurations": [
        {
            //使用MAKEFILE
            "name": "make file debug",
            "type": "cppdbg",
            "request": "launch",
            "program": "${workspaceFolder}/../_Bin//eglshowbmpd.out",
            "args": [],
            "stopAtEntry": false,
            "cwd": "/home/111/XDEV/_Bin",
            "environment": [],
            "externalConsole": false,
            "MIMode": "gdb",
            "setupCommands": [
                {
                    "description": "为 gdb 启用整齐打印",
                    "text": "-enable-pretty-printing",
                    "ignoreFailures": true
                }
            ],
            "preLaunchTask": "make file debug",
            "miDebuggerPath": "/usr/bin/gdb"
            
        },
        {
            //使用MAKEFILE
            "name": "make file",
            "type": "cppdbg",
            "request": "launch",
            "program": "${workspaceFolder}/../_Bin//eglshowbmp.out",
            "args": [],
            "stopAtEntry": false,
            "cwd": "${workspaceFolder}",
            "environment": [],
            "externalConsole": false,
            "MIMode": "gdb",
            "setupCommands": [
                {
                    "description": "为 gdb 启用整齐打印",
                    "text": "-enable-pretty-printing",
                    "ignoreFailures": true
                }
            ],
            "preLaunchTask": "make file",
            "miDebuggerPath": "/usr/bin/gdb"
        }
    ]
}

其中重要的参数为:
name:这与task.json->label中一一对应,必须准确

program:可执行文件路径,如果使用相对路径,只能使用${workspaceFolder}/…/,特别注意使用相对路径远程调试时会提示找不到文件,建议使用绝对路径,如/HOME/XXX/XDEV

cwd:工作路径,建议使用绝对路径

到此,环境搭建完毕,下一篇使用FFMEPG解码

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Linux 音视频开发杂记之一-环境配置使用vscode 的相关文章

  • 为什么我不能用 `= delete;` 声明纯虚函数?

    Intro 纯虚函数使用通用语法声明 virtual f 0 然而 自 c 11 以来 有一种方法可以显式地传达non existence 特殊 成员函数的 Mystruct delete eg default constructor Q
  • 如何将 Hudson/Jenkins 参数传递给 Windows 批处理命令

    好吧 我需要在我的 Hudson 作业中执行一个批处理文件 我有一个参数 Jenkis 参数 我需要将这个值 如参数 传递给批处理文件 我尝试了以下操作 Deploy cmd configuration DEPLOYCONFIGURATIO
  • 如何创建可以像 UserControl 一样编辑的 TabPage 子类?

    我想创建一个包含一些控件的 TabPage 子类 并且我想通过设计器来控制这些控件的布局和属性 但是 如果我在设计器中打开子类 我将无法像在 UserControl 上那样定位它们 我不想创建一个带有 UserControl 实例的 Tab
  • JSON 数组到 C# 列表

    如何将这个简单的 JSON 字符串反序列化为 C 中的列表 on4ThnU7 n71YZYVKD CVfSpM2W 10kQotV 这样 List
  • 从多个类访问串行端口

    我正在尝试使用串行端口在 arduino 和 C 程序之间进行通信 我对 C 编程有点陌生 该程序有多种用户控制形式 每一个都需要访问串口来发送数据 我需要做的就是从每个类的主窗体中写入串行端口 我了解如何设置和写入串行端口 这是我的 Fo
  • 暂停下载线程

    我正在用 C 编写一个非常简单的批量下载程序 该程序读取要下载的 URL 的 txt 文件 我已经设置了一个全局线程和委托来更新 GUI 按下 开始 按钮即可创建并启动该线程 我想要做的是有一个 暂停 按钮 使我能够暂停下载 直到点击 恢复
  • 如何从 C# 控制器重定向到外部 url

    我使用 C 控制器作为网络服务 在其中我想将用户重定向到外部网址 我该怎么做 Tried System Web HttpContext Current Response Redirect 但没有成功 使用控制器的重定向 http msdn
  • 检查算术运算中的溢出情况[重复]

    这个问题在这里已经有答案了 可能的重复 检测 C C 中整数溢出的最佳方法 https stackoverflow com questions 199333 best way to detect integer overflow in c
  • IronPython:没有名为 json 的模块

    我安装了 IronPython 我的 python 文件如下所示 import sys print sys version import json 运行它的代码 var p Python CreateEngine var scope p C
  • 如何确保应用程序在 Linux 上持续运行

    我试图确保脚本在开发服务器上保持运行 它会整理统计数据并提供网络服务 因此它应该会持续存在 但一天中有几次 它会因未知原因而消失 当我们注意到时 我们只需再次启动它 但这很麻烦 并且某些用户没有权限 或专有技术 来启动它 作为一名程序员 我
  • 已达到网络 BIOS 命令限制

    我的 ASP Net 应用程序从另一台 Windows 服务器上的共享文件夹获取文件 当请求增加时 我收到以下错误 The network BIOS command limit has been reached 我已按照以下步骤操作微软 K
  • Qt 创建布局并动态添加小部件到布局

    我正在尝试在 MainWindow 类中动态创建布局 我有四个框架 它们是用网格布局对象放置的 每个框架都包含一个自定义的 ClockWidget 我希望 ClockWidget 对象在调整主窗口大小时相应地调整大小 因此我需要将它们添加到
  • 在非活动联合成员上使用“std::addressof”是否定义明确[重复]

    这个问题在这里已经有答案了 下面的代码是尝试实现constexpr的版本offsetof在 C 11 中 它可以在 gcc 7 2 0 和 clang 5 0 0 中编译 这取决于申请std addressof工会非活跃成员的成员 这是明确
  • 当“int”处于最大值并使用 postfix ++ 进行测试时,代码定义良好吗?

    示例 未定义行为的一个示例是整数溢出的行为 C11dr 3 4 3 3 int溢出是未定义的行为 但这是否适用于存在循环的以下内容 并且不使用现在超出范围的副作用i 特别是 这是否后缀增量规格帮助 结果的值计算在副作用之前排序 更新操作数的
  • 当模板类不包含可用的成员函数时,如何在编译时验证模板参数?

    我有以下模板struct template
  • 在类的所有方法之前运行一个方法

    在 C 3 或 4 中可以做到这一点吗 也许有一些反思 class Magic RunBeforeAll public void BaseMethod runs BaseMethod before being executed public
  • 耐用功能是否适合大量活动?

    我有一个场景 需要计算 500k 活动 都是小算盘 由于限制 我只能同时计算 30 个 想象一下下面的简单示例 FunctionName Crawl public static async Task
  • 双精度类型二维多维数组的 pinvoke 编组作为 c# 和 c++ 之间的输入和输出

    我有以下我正在尝试解决的双物质类型的 2d 多维数组的 c 和 c pinvoke 编组 我已经查看了以下热门内容以获得我目前拥有的内容使用双精度数组进行 P Invoke 在 C 和 C 之间编组数据 https stackoverflo
  • 用于 C# XNA 的 Javascript(或类似)游戏脚本

    最近我准备用 XNA C 开发另一个游戏 上次我在 XNA C 中开发游戏时 遇到了必须向游戏中添加地图和可自定义数据的问题 每次我想添加新内容或更改游戏角色的某些值或其他内容时 我都必须重建整个游戏或其他内容 这可能需要相当长的时间 有没
  • 使用 Crypto++ 获取 ECDSA 签名

    我必须使用 Crypto 在变量中获取 ECDSA 签名 我在启动 SignMessage 后尝试获取它 但签名为空 我怎样才能得到它 你看过 Crypto wiki 吗 上面有很多东西椭圆曲线数字签名算法 http www cryptop

随机推荐

  • C#串口通讯中 16进制与字符串、字节数组之间的转换

    1 c 中如何将十进制数的字符串转化成十六进制数的字符串 十进制转二进制 Console WriteLine 十进制166的二进制表示 Convert ToString 166 2 十进制转八进制 Console WriteLine 十进制
  • 多linux系统u盘制作,如何制作一个通用的多系统安装U盘六(Linux相关配置)

    linux相关配置 要引导安装linux 需要把相关linuxISO文件中的相关文件复制出来 主要是核心文件 vmlinuz 和初始内存盘 initrd img 以及isolinux cfg配置文件 有以下区别 CentOS5 x RHEL
  • Addressables学习笔记

    文章目录 运行环境 资源引用 AssetReference 属性 AssetReferenceT AssetLabelReference AsyncOperationHandle 属性 Addressables API Instantiat
  • PyTorch-05神经网络与全连接(Logistic Regression、交叉熵、交叉熵来优化一个多分类的问题、全连接层(MLP网络层)、激活函数与GPU加速、测试、Visdom可视化)

    PyTorch 05神经网络与全连接 Logistic Regression逻辑回归 交叉熵 交叉熵来优化一个多分类的问题 全连接层 MLP网络层 激活函数与GPU加速 测试 validation performance Visdom可视化
  • css中设置字体下划线,css如何设置字体下划线

    css设置字体下划线的方法 可以利用text decoration属性来进行设置 如 text decoration underline text decoration属性用于规定添加到文本的修饰 下划线 上划线 删除线等 属性介绍 tex
  • fatal:'origin' does not appear to be a git repository fatal:Could not read from remote repository

    天gitlab中遇到的问题 当 git push origin branch name时遇到报错如下 fatal origin does not appear to be a git repositoryfatal Could not re
  • Spring、SpringBoot、SpringCloud的关系

    Spring Spring框架 是一套为了解决企业应用开发的复杂性而创建的框架 为开发java应用程序提供了全面的基础架构的支持 它提供了依赖注入和 开箱即用 的一些模块 如Spring Mvc Spring Jdbc Spring Sec
  • MNIST识别--使用Numpy实现线性支持向量机(SVM)

    作为经典的机器学习方法 网上有很多调用sklearn库的SVM接口进行手写数字识别的教程 本文主要采用Numpy从零开始实现线性SVM 以帮助读者了解SVM的实现原理 本文不涉及到太多理论性的内容 纯粹只是代码的实现 注释也不多 后面如果时
  • 静态路由与DHCP

    路由器的路由表 r1 show ip route 查看路由表 默认路由表的特点 1 路由表中记录的是网段 2 路由器默认仅具有直连路由 路由查表规则 1 递归查找 2 最长匹配 所有路由器不可达的网段称为未知网段 获取未知网段的方法 1 静
  • 在html5中播放RTSP/RTMP/HLS/HTTP视频流媒体的几种方案,并支持H.265

    经过多年的项目实战和研发经验的积累 总结了一下对于H5视频可视化在视频播放上如何做到无插件H5展示的方法 尤其是契合安防行业的方案 除了HTTP WebSocket类的传输协议 其他是无法通用地传输到浏览器的 所以 如果要做一款通用的H5视
  • PyPy 安装

    目录 前言 1 下载 2 安装 2 1 安装包解压缩 2 2 添加路径至系统变量 3 cmd 调用 4 对比 Python 3 8的界面 总结 前言 提示 这里可以添加本文要记录的大概内容 听说 PyPy 的纯 Python 环境的运行速度
  • mysql查询性能相关

    1 mysql innodb查询与什么因素有关 这张ppt说的相当详细 http tech uc cn wp content uploads 2013 10 MySQL Innodb E9 AB 98 E6 80 A7 E8 83 BD E
  • 【HTML】创建 <h2>-<h6> 标签

    任务描述 本关任务 依次创建 h2 h6 标签 文本内容为创建不同字体大小的标题 查看它们的区别 实现的效果如下 相关知识 第一关已经创建了h1标签 它是干什么的呢 它一般用来创建标题 另外 h2 也用来创建标题 它们有什么区别呢 h1的字
  • 快速掌握正则表达式

    文章目录 限定符 Qualifier 第一个常用限定符 第二个常用限定符 第三个常用限定符 或运算符 字符类 元字符 Meta characters d 数字字符 w 单词字符 空白符 s 任意字符 行首行尾 贪婪与懒惰匹配 Greedy
  • c++设计模式

    C 是一种面向对象的编程语言 支持许多设计模式 以下是几种常见的设计模式 1 单例模式 Singleton Pattern 确保一个类只有一个实例 并提供一个全局访问点 来访问该实例 2 工厂模式 Factory Pattern 定义一个接
  • kafka笔记3--快速部署KRaft版本的kafka3.1.1

    kafka笔记3 快速部署KRaft版本的kafka3 1 1 1 介绍 2 部署测试 2 1 部署 2 2 测试 3 注意事项 4 说明 1 介绍 Apache Kafka Raft 是一种共识协议 它的引入是为了消除 Kafka 对 Z
  • 【Java愚公】gitlab设置中文

    gitlab设置中文 设置步骤 设置完成后效果图 设置步骤 gitlab版本自带了中文语言包 可以通过上述方式直接切换 设置流程说明如下 访问gitlab服务 在用户偏好设置中设置用户语言类别 如下图所示 设置完成后效果图
  • 【STM32】电子时钟(1)

    一直想系统的学习STM32 但是公司的项目主要是电机算法 每天看到头都快炸了 打算仿照手机上的时钟应用写一个电子时钟 因为这个任务的定位是 好吧 就没有定位 主要是边玩边学 也不设时间期限和具体的功能指标 有空了就搞搞 想到了什么就加上去
  • 成功解决Myeclipse2017破解时遇到的crack.bat文件闪退问题

    解决问题 解决Myeclipse2017破解时遇到的crack bat文件闪退问题 解决方法 是环境变量设置有错 1 新建系统环境变量 JAVA HOME D Program Files MyEclipse2017CI7 binary co
  • Linux 音视频开发杂记之一-环境配置使用vscode

    开发环境 开发环境选择window10 Visual Studio Code ubuntu20 64 虚拟机 一Windows 安装 1 安装git for windows 安装过程直接下一步 主要原因是windows OpenSSH在vs