VisualStudio(vs)开发linux程序配置

文章目录

  • VisualStudio(vs)开发linux程序配置
    • 远程linux环境
    • 头文件智能提示
    • 工程配置
    • 第三方静动态库和头文件的使用
      • 路径配置
      • 文件复制
    • 其他
    • ffmpeg开发
    • 参考

VisualStudio(vs)开发linux程序配置

  • 在开始之前,强烈建议阅读官方文档,或许问题就已经解决了
  • 官方文档:https://docs.microsoft.com/zh-cn/cpp/linux/download-install-and-setup-the-linux-development-workload?view=vs-2017

远程linux环境

  • 为了能远程上linux并调试,需要在linux上安装如下工具:gcc、gdb、rsync、zip、make、openssh-server、cmake
  • 在ubuntu上则按如下命令安装
sudo apt-get install openssh-server g++ gdb make rsync zip
sudo service ssh start

VisualStudio(vs)开发linux程序配置_第1张图片

头文件智能提示

  • 默认情况下虽然可以远程编译通过,但在vs2017上并没有智能提示,多了好多波浪线,看着就很不舒服(据说在linux上安装了zip工具后vs就会自动将头文件压缩复制到windows本地然后提供智能提示,反正我是没享受到,因此只能手动拷贝了)
  • 为了解决这个头文件的问题,需要将目标主机即linux上的头文件拷贝到本地,做法如下
  • 首先将远程linux上的/usr/include里的所有文件拷贝到windows本地
  • 之后在vc++目录里的包含目录配置下拷贝过来的文件的目录
    VisualStudio(vs)开发linux程序配置_第2张图片
  • 这样波浪线就消失了,而且可以跳转到定义了

工程配置

  • 首先要修改下远程根目录,如下图
  • 注意,默认是~/projects,表示在用户目录的projects下,但是这个~会导致奇怪的问题,因此我们最好为其指定一个明确的路径,如我这里就放在/root/projects下了
  • VisualStudio(vs)开发linux程序配置_第3张图片

第三方静动态库和头文件的使用

  • 第三方库的使用涉及到文件的复制问题,建议先看下官方文档关于复制源的说明,地址如下
    • https://docs.microsoft.com/zh-cn/cpp/linux/prop-pages/copy-sources-project?view=vs-2017

路径配置

  • 假如工程引用了第三方的静动态库(自然包含头文件了),那么怎么办呢
  • 项目中的源文件vs会帮我们自动拷贝到linux上(路径就是$(RemoteRootDir)/$(ProjectName)),因此我们得手动将库和头文件拷到linux存放源文件的地方,在本例中
  • $(RemoteRootDir)=/root/projects;
  • $(ProjectName)=ffmpeg_decode;
  • 静动态库和头文件分别放在lib和include文件夹里,示例如下
-/
  -root
    -projects
      -ffmpeg_decode
		-xxx.cpp
		-lib
		  -xxx.a
		-include
		  -xxx.h
  • 然后配置包含目录,如下图,第一个路径主要是给linux上用的,这个路径要根据实际设置(即linux上的路径),第二个路径则是给vs上用的(即windows本地的路径)
  • VisualStudio(vs)开发linux程序配置_第4张图片
  • 头文件配完了,接下来需要配置第三方库
  • 打开链接器,在常规下配置linux上库的路径,在输入上配置库的名称,如下图
  • VisualStudio(vs)开发linux程序配置_第5张图片
  • VisualStudio(vs)开发linux程序配置_第6张图片
  • 以上因为主要是在linux上编译,因此常规库里的附加库目录只是配置了在linux上的路径,在本示例中是$(RemoteRootDir)/$(ProjectName)/lib
  • 输入则是配置库的名称,本示例中由于引用的是ffmpeg的库libavcodec.a,libavformat.a等库,故配上avcode,avformat等(前缀和后缀不用写)

文件复制

  • 路径都配置好了之后,接下来就是文件的拷贝了,即将第三方库和头文件拷贝到我们之前的路径配置,使之相对应
  • 你可以直接将文件手动复制到linux上对应位置,但这样有个问题,就是vs上工程在清理后远程所有文件都消失了,又必须得重新手动拷贝,这样太麻烦了,因此必须寻求自动复制的方案,如下
  • 如果文件比较少,那么可以直接在配置属性的复制源里添加即可,如图
  • VisualStudio(vs)开发linux程序配置_第7张图片
  • 这样在运行时就会将windows本地的文件复制到linux上指定目录了,本例展示了静态库.a的复制,其他文件也是如此
  • 但是有可能文件太多了,一个一个这样写也太麻烦了,幸运的是官方对此有一定解决方案,如下图
    VisualStudio(vs)开发linux程序配置_第8张图片
  • 于是打开项目的vcxproj文件,将要复制的东西添加如下

<Project>
	...
  <ItemGroup>
   <MyLibItems Include="lib/**" />
   <DataFilesToCopyRemotely Include="@(MyLibItems)" />
  ItemGroup>
  <ItemGroup>
   <MyIncludeItems Include="include/**" />
   <DataFilesToCopyRemotely Include="@(MyIncludeItems)" />
  ItemGroup>
Project>
  • 保存后再试试吧,文件在远程时本地的就会被复制过去了

其他

  • 当程序有日志输出时,我们只能在linux控制台才能看到,如下
  • VisualStudio(vs)开发linux程序配置_第9张图片

ffmpeg开发

  • 可能会报pthread相关的错误,因此需要我们将pthread链接过去(-lpthread,其中l是L的小写,并不是i的大写I,真是讨厌,这两个看起来是一模一样的),如下
    VisualStudio(vs)开发linux程序配置_第10张图片
  • 可能会报ffmpeg库里的很多函数未定义,这个主要是由于库的依赖导致的,将被依赖的放在依赖的前面即可,如avformat依赖了avcodec,因此要放在avcodec的前面,如图
  • VisualStudio(vs)开发linux程序配置_第11张图片

参考

Visual Studio 2017:Linux C++ 开发教程(WSL篇)_运维_猫科龙-CSDN博客\nhttps://blog.csdn.net/maokelong95/article/details/64523303/

使用Visual Studio 2017开发Linux程序 - dchao - 博客园
https://www.cnblogs.com/dongc/p/6599461.html

vs2017 编译C++ 生成linux下可运行的.out文件_运维_QuanWaiRen0的博客-CSDN博客
https://blog.csdn.net/QuanWaiRen0/article/details/80697154

Linux下undefined reference to ‘pthread_create’问题解决_运维_jiangxinyu的专栏-CSDN博客\nhttps://blog.csdn.net/jiangxinyu/article/details/7778864

你可能感兴趣的:(ffmpeg,visual,studio,linux)