vs写的程序在linux中运行不了了,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

521fb5e7a5476c9dc86be1e2cdb53e37.png

头文件智能提示

默认情况下虽然可以远程编译通过,但在vs2017上并没有智能提示,多了好多波浪线,看着就很不舒服(据说在linux上安装了zip工具后vs就会自动将头文件压缩复制到windows本地然后提供智能提示,反正我是没享受到,因此只能手动拷贝了)

为了解决这个头文件的问题,需要将目标主机即linux上的头文件拷贝到本地,做法如下

首先将远程linux上的/usr/include里的所有文件拷贝到windows本地

之后在vc++目录里的包含目录配置下拷贝过来的文件的目录

fda690deb5cf693566b51f076d708661.png

这样波浪线就消失了,而且可以跳转到定义了

工程配置

首先要修改下远程根目录,如下图

注意,默认是~/projects,表示在用户目录的projects下,但是这个~会导致奇怪的问题,因此我们最好为其指定一个明确的路径,如我这里就放在/root/projects下了

14ff5eda28da66af3bc47878753506d4.png

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

第三方库的使用涉及到文件的复制问题,建议先看下官方文档关于复制源的说明,地址如下

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本地的路径)

cc4305ec622181b1980014b41a0628a2.png

头文件配完了,接下来需要配置第三方库

打开链接器,在常规下配置linux上库的路径,在输入上配置库的名称,如下图

e5a23c5ddf621e2fab91480275bd295f.png

a15b10c1a11a5136b07874c6a86a39cc.png

以上因为主要是在linux上编译,因此常规库里的附加库目录只是配置了在linux上的路径,在本示例中是$(RemoteRootDir)/$(ProjectName)/lib

输入则是配置库的名称,本示例中由于引用的是ffmpeg的库libavcodec.a,libavformat.a等库,故配上avcode,avformat等(前缀和后缀不用写)

文件复制

路径都配置好了之后,接下来就是文件的拷贝了,即将第三方库和头文件拷贝到我们之前的路径配置,使之相对应

你可以直接将文件手动复制到linux上对应位置,但这样有个问题,就是vs上工程在清理后远程所有文件都消失了,又必须得重新手动拷贝,这样太麻烦了,因此必须寻求自动复制的方案,如下

如果文件比较少,那么可以直接在配置属性的复制源里添加即可,如图

389213ea19d6572afcce5dd4a0e42d8a.png

这样在运行时就会将windows本地的文件复制到linux上指定目录了,本例展示了静态库.a的复制,其他文件也是如此

但是有可能文件太多了,一个一个这样写也太麻烦了,幸运的是官方对此有一定解决方案,如下图

cc9a507c36110089ddc3b759c611a71e.png

于是打开项目的vcxproj文件,将要复制的东西添加如下

...

ItemGroup>

ItemGroup>

Project>

保存后再试试吧,文件在远程时本地的就会被复制过去了

其他

当程序有日志输出时,我们只能在linux控制台才能看到,如下

187a47e20b0e206fba5f73ff3d5ae0b1.png

ffmpeg开发

可能会报pthread相关的错误,因此需要我们将pthread链接过去(-lpthread,其中l是L的小写,并不是i的大写I,真是讨厌,这两个看起来是一模一样的),如下

cccdcb5d85a002f10368efb06549f8bd.png

可能会报ffmpeg库里的很多函数未定义,这个主要是由于库的依赖导致的,将被依赖的放在依赖的前面即可,如avformat依赖了avcodec,因此要放在avcodec的前面,如图

d3ddf0719ba7cd6b579e4286102c27f8.png

参考

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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值