美文网首页
跨平台编程(跨Windows/Linux)

跨平台编程(跨Windows/Linux)

作者: 曹元_ | 来源:发表于2021-04-09 07:29 被阅读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;
    }
    

    相关文章

      网友评论

          本文标题:跨平台编程(跨Windows/Linux)

          本文链接:https://www.haomeiwen.com/subject/dcdtfltx.html