VS2017开发Linux c++程序,调试动态库+远程Attach

本文详细介绍如何使用VS2017进行跨平台C++项目的开发与调试,包括配置SSH连接、创建Linux工程、配置工程属性、解决常见错误等关键步骤。

作者:刘树伟

一、环境

使用VS2017+安装了CentOS7的VMWare虚拟机,编译x64 Linux C++项目。

二、安装VS2017

安装VS2017的时候,选上“使用C++的Linux开发(Linux development with C++)”组件。

 

vs2017是通过SSH连接到CentOS上调用gdb来调试的,所以要配置SSH连接。执行vs2017菜单栏中的【工具 | 选项】菜单项,在“选项“对话框中,切换到”跨平台“选项,添加SSH连接信息,主机名中输入CentOS IP地址,用户名和密码输入CentOS的用户名和密码(事先关闭CentOS防火墙,或者在CentOS中放行本机)。

在Linux上,要提前装好gdb服务,在Centos上,使用

yum install gdb-gdbserver

来安装(注意,微软官方是使用sudo apt install -y build-essential gdbserver,经测试不好使)

三、创建Linux C++工程

为了代码好管理,我们为我们的项目创建一个文件夹,项目中的所有子工程都放到这个文件夹下,例如文件夹名字为MyProject。不同的项目放到不同的文件夹下管理,看上去更有条理。

3.1 创建可执行工程

vs2017新建Visual C++里的"跨平台(Cross Platform)"中的Linux项目,选“控制台应用程序(Linux)(Console Application(Linux))”.

 

点“确定”按钮后,VS2017自动生成main.cpp。

3.2 创建动态链接库工程

vs2017新建Visual C++里的"跨平台(Cross Platform)"中的Linux项目,选“空项目(Linux)”,创建一个Linux空工程:

在Dynamic工程中,创建一个Dynamic.cpp,里面是动态库需要导出的函数。

注意:在使用vs开发windows c++项目的时候,当我们包含一个头文件时,可以不把这个头文件加到工程中,但开发linux c++项目的时候,由于vs2017是把代码拷贝到CentOS上编译的,如果不把要包含的头文件加到工程中,vs2017是不会把这个头文件拷贝到CentOS上,这将导致编译时找不到文件。所以,任何我们写的代码,只要用到,都需要加到工程中。

注意:如果工程中没有代码,在编译的时候,vs2017不会把工程拷贝到CentOS中,也就是说,CentOS中不会创建Dynamic文件夹。

3.3 创建项目

把TestApp文件夹中的TestApp.sln复制一份到MyProject目录中,并改名为MyProject.sln,使用vs2017打开MyProject.sln。MyProject.sln就是原来的TestApp.sln,且加载了TestApp.vcxproj,由于现在MyProject.sln和TestApp.vcxproj不在同一个目录,所以加载的时候,会弹出如下错误对话框:

点确定即可。

 

正如预期的一样,项目中的TestApp变成不可用:

我们选中它,按键盘的Del键删除这个项目即可。

然后我们把TestApp和Dynamic两个工程加到MyProject项目中:

加完后如下:

设置TestApp为主工程。

3.4 可执行工程调用动态链接库

我们通过动态加载动态库来使用它里面的函数

首先封装加载动态库的函数(放到TestApp工程中的main.cpp即可):

#include <cstdio>

#include <dlfcn.h>

#include <unistd.h>

#include <string>

#include <string.h>

 

typedef void *HMODULE;

typedef int(*FPluginEntryFunc)(void *);

 

#define PATH_MAX 4096

 

void *Linux_LoadLibrary(const char *path, int mode)

{

    void *hModule = NULL;

    dlerror();

    hModule = dlopen(path, mode);

    if (hModule == NULL)

    {

        return NULL;

    }

 

    return hModule

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值