跨平台编程(跨Windows/Linux)

2021-04-09  本文已影响0人  曹元_

一、定义及要求

1. 何为跨平台?

一份代码,在Windows上可以编译、运行,在Linux上也可以编译和运行,则称此代码是可以跨平台的。

2. 特点

1)同一份代码,无需改动

2)运行结果相同

3. 跨平台代码的要求

1)尽量使用标准函数/类型/语法

如,ANSI C/STL,是各个平台都支持的函数;

char/short/int/double/float,这些类型各平台都支持。

2)尽量避免平台相关的类型、函数、语法

如,有的编译器认为这样是变量i重复定义

for(int i = 0; i < 2; i++){}

for(int i = 0; i < 10; i++){}

如,用fopen/fclose/fread/fwrite来对文件进行操作,不用open/close/read/write来操作文件。

4. 跨平台的封装

以popen/pclose为例,在Linux下,支持popen/pclose ,在Windows下,支持_popen/_pclose,如何做到代码上的统一?

使用如下条件编译,

ifdef _WIN32

//Windows下的操作

else

//Linux下的操作

endif

二、SAMBA目录共享

SAMBA:是在Linux和UNIX系统上实现SMB协议的一个免费软件。使用它可实现:在Linux服务器上设置一个共享目录,让Windows主机上可以访问(rw)这个目录。

环境:centos6.7

1. 安装samba

yum install samba samba-client samba-swat

备注:这三个都要安装

2. 关闭selinux(一个强化的安全子系统)和firewall(防火墙)

1)关闭selinux

vi /etc/selinux/config

将SELINUX=enforcing

改为

SELINUX=disabled

2)关闭firewall

关闭: systemctl stop firewalld

开机禁用 : systemctl disable firewalld

关闭服务后,重启电脑

备注:也可以不关闭selinux和firewall,而做一些精细的配置。在内网使用,为了方便,可直接关闭selinux,关闭firewall

3. 修改配置文件/etc/samba/smb.conf

vim /etc/samba/smb.conf

进入编辑模式,在最下面添加如下内容

[myshare]                                      #共享名称comment = passwd                                #提示信息,任意写 path = /home/sharefolder                           #共享目录public = no                                     #关闭“所有人可见”writable = yes                                  #允许写入操作

4.添加samba用户

pdbedit -a -u root(此处为用户名)

执行过命令后,输入登录密码和再次输入密码确认

备注:samba服务程序的用户账号必须在当前系统中已经存在

5. 创建共享目录

mkdir /home/sharefolder

chown -R root:root /home/sharefolder

备注:该目录在第3步,修改配置文件/etc/samba/smb.conf中配置

6. 启动smb服务

/etc/init.d/smb start

7. 在windows上访问该目录,实现文件共享

windows键+R打开运行窗口,输入Samba服务器的IP地址

image

输入第4步创建的samba用户的用户名和密码

image

即可完成访问,实现linux和windows对文件夹的共享,且均具有读写权限。

image

8. 映射网络驱动器

映射网络驱动器,可快速实现对网络共享文件夹的快速访问。

可右击上面的“myshare”文件夹,点击“映射网络驱动器”

image

选择驱动器名称

image

即可得到一个快速访问该共享文件夹的盘符。

三、VisualGDB

1. VisualGDB的功能介绍

VisualGDB能够让Linux下的程序在Windows上用Visual Studio中调试起来,利用vs的可视化界面方便的进行linux程序的调试。

VisualGDB通过SSH使得Windows下的VS能够连接到Linux的环境,只要配置好头文件以及库文件等相关目录即可。配置这些属性就和写Makefile类似。下面就来简单介绍一下如何安装和使用VisualGDB,使得在windows的vs中调试linux程序。

下面的测试环境

环境:VS2008 + VisualGDB5.1.6

2. VisualGDB的安装、使用及示例

1)VisualGDB的安装

既下载安装VisualGDB,并激活。

2)创建VisualGDB项目

a.文件->新建->项目,选择VisualGDB->Linux Project Wizard,填写好项目名称、及位置后,点击确定,如图

image

ps:第一次创建的时候,有可能会报错,提示“The Visual package not loaded, please run devenv.exe /ResetSkipPkgs”。此时需要用命令行运行 devenv.exe ,并带上参数/ResetSkipPkgs,如图

image

b. 选择Use GNU Make,点击next,如图

image

c. 配置linux环境信息,点击next,如图

image

d. 填写对应的linux目录,点击finish,即完成了工程的创建,如下图。该目录的作用是在windows下的vs中创建的工程文件夹、文件等都会拷贝到该linux远程服务器的该目录

image

3)项目属性配置

右击项目->VisualGDB Project Properties

  1. Project settings->Remote directory(对于建立工程时没有配置的这里依旧可以修改)
image
  1. Makefile settings(编译时的配置)

(1) Include directories:头文件目录,主要是第三方头文件目录;

(2) Library directoried:库文件目录;

(3) Library names:链接库名(对应于编译链接时的g++ -L l<链接库名>,如:pthread。

image

3、Debug setting(运行时的配置)

此处的Run debugger as root with sudo表示在Linux中以管理员的身份运行程序。

下面的LD_LIBRARY_PATH表示运行时连接的库,即.so动态链接库,对于某些项目,发现自己编译能通过,但是运行时总是报链接错误的就要看看此处的动态库路径是否填写。

image

4. 编程示例

LinuxProject1.cpp

#include <iostream>
 
using namespace std;
 
int main(int argc, char *argv[])
{
    char sz[] = "Hello, World!";    //Hover mouse over "sz" while debugging to see its contents
    cout << sz << endl; //<================= Put a breakpoint here
    return 0;
}
上一篇下一篇

猜你喜欢

热点阅读