VS2019跨平台编译基础

 

1 虚拟机设置

1.1 虚拟机网络设置参考

https://blog.csdn.net/wx2320061619/article/details/104675181/

注意!:贴中第三步vi ifcfg-ens33 创建了文件ifcfg-ens33,建议查看/etc/sysconfig/network-scripts/路径下是否有ifcfg-ensxxxx文件,若有在该文件基础上按照贴中修改参量即可。我的文件是ifcfg-eno16777736。

贴中没有给出防火墙关闭方式,命令:

sudo systemctl stop firewalld 临时关闭

sudo systemctl disable firewalld ,然后reboot 永久关闭

sudo systemctl status  firewalld 查看防火墙状态

1.2 脱机状态下虚拟机连接

 

 

在实体机中不需要禁用其他网卡,只需要对应修改VMnet8

最后双方能互相ping通即成功连接

 

2 VS设置

2.1 项目创建

在创建页的的平台选择栏选择“Linux”即可成功创建带跨平台编译的项目

2.2 连接远程系统

工具-》选项-》跨平台

添加连接,实体机在不同的网络中会有不同的网络,会要求虚拟机重新设置,如果采用1.2中的网络设置方法,可以在不同网络中保持实体机和虚拟机的连接

 

2.3 解决方案属性设置

2.3.1 常规

输出目录:最后的可执行程序的实体机的输出目录,部署后会在虚拟机上保持相同的结构

远程生成计算机:2.2中设置的连接列表中选择

远程(根/项目/部署)目录:对应虚拟机上的目录

 

2.3.2 调试

程序:默认为工程生成的目录

程序参数:输入给程序的测试参数

工作目录:如果在常规中修改了可执行程序的生成目录,则该处应该进行对应修改

 

2.3.3 C/C++

附加包含目录:头文件文件夹,应当按照linux方式使用反斜杠,添加后include头文件可免去路径

调试信息格式:修改之后在编译时报错更详细

 

2.3.4 链接器

附加库目录:填写Windows中so文件所在路径

 

附加依赖项,把要使用的so文件的文件名添加在这

 

3 Linux下对应操作

  1. 附加包含的头文件文件夹和依赖库文件夹不会对应复制去虚拟机,需要自己手动复制
  2. 在Windows中设置为这样的结构,并且在vs中将生成的可执行程序和cpp文件置于同级路径后,在linux下也复制为相同结构,可以提高一致性

 

3.在虚拟机对应目录中可见可执行程序,执行ldd命令查看链接库情况,可见添加的链接库not found,因此不能直接执行可执行程序,需要通过shell脚本调用。

 

4 Shell脚本编写

4.1 创建

在linux终端中:

创建文件 touch compile.sh

赋予权限 chmod +x compile.sh

4.2 执行脚本

一份编译/执行的脚本示例

#!/bin/bash

 

cd $(dirname $0)  进入脚本所在路径,$0为脚本执行的第一个参数(固有的),为脚本的绝对路径

CURDIR=$(pwd) 将CURDIR变量赋值为当前路径,$为取值符号,要将pwd的值传递给变量,必须使用$()

 

export LD_LIBRARY_PATH=$LD_LIBRARY_PATH$CURDIR/../bin/Release/ LD_LIBRARY_PATH是一个系统变量名,搜索库所在的,一般初始为空,使用export后,可以搜索路径存在的依赖库

ldd VS_Compile_test_01.out 查看库依赖关系,可见缺少的库已经有了具体的对应

./VS_Compile_test_01.out $1 将传递给脚本的第一个变量名传递给可执行程序

4.3 编译

g++ -o CentOSL3Test.out "libGISManager.so" "libGridDem.so" "libIdpmCoordTrans.so" "libIdpmImage.so" "libIdpmRFMAL.so" "libIdpmVoting.so" "libSIATMatchCore.so" "libWuGeoCvt.so" "libWuOrthoEngine.so" IdpmDem.cpp Ini.cpp RFMOrientation.cpp SIAT_KNL.cpp tinyxml2.cpp AtxIndirectAdjustmentX.cpp

 

-o(小写O)名称:输出的可执行程序名称

-L “路径” :编译所需库的路径

-l(小写L)”库名”:编译所需的具体的依赖库

-I (大写i)“路径” :include文件夹路径

最后要加上各个编译所使用的头文件对应的源文件

4.4 其他用法

  1. echo是类似printf的用法,大概三种用法,假设,内容=
    1. echo 内容 ——内容
    2. echo ‘$内容’  ——$内容
    3. echo $内容 ——1
  2. 获取程序的输出值
    1. temp=`./VS_Compile_test_01.out $0`    ``为键盘上1左侧的按键对应的符号,可以捕捉程序所有的printf出来的内容,并将其去掉换行符,转化为一个字符串
    2. temp=$(./VS_Compile_test_01.out $0) 与上方相同的效果,捕捉printf内容
    3. temp=$?   在紧接在可执行程序之后使用,可以捕捉main函数的返回值,如1、0,是一个int
  3. 基于捕捉程序的输出值,同样可以在脚本中进行运行逻辑的处理

./VS_Compile_test_01.out $0

CATCH=$?

if [ $CATCH <> 0 ];then    /       if [ "$CATCH" -eq "0" ];then

        statement 1

else

        statement 2

fi

待续……

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值