作者:刘树伟
一、环境
使用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

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

被折叠的 条评论
为什么被折叠?



