vs2017与linux(centos7)联合调试记录
之前一直做Windows下的开发,最近需求转到linux,将最近心得写下希望对开发者有所帮助,不对的地方请大神们指正。
网上有很多帖子已经对vs2017建立基本的linux程序步骤做了详细解释,这里不再说明,可参考:
https://www.cnblogs.com/Harley-Quinn/p/7465517.html
下面主要说一下包含用户头文件和用户库的相关问题:
首先要明确的一点是,vs2017在对linux编译调试时,其主要作用只是一个“驱壳”,帮你把工程里所有的设置以及文件全部准备好,编译时连接到linux上,vs2017本身不做编译及运行。
当vs2017编译时会将工程中所有的文件在linux上会建立一个工程并复制所有相关的文件(除外部依赖)到此。具体设置在工程-》属性-》配置属性-》通用-》远程编译根目录:
基本的解决方案文件树结构如下:
实际文件夹的结构如下:
调试选择gdb或gdbserver,本人机器选择gdb时报出一下错误:
选择gdbserver后正常运行,gdbserver可在https://pkgs.org/download/gdb-gdbserver下载离线包并使用yum install xxxx.rpm.
工程属性设置添加头文件所在目录:
c/c++所有选项:注意附加选项,如果是多线程编译请再次添加-lpthread;c++标准可根据你的要求设置。
工程属性设置添加相关的库名称:设置用到的相关用户库(名称去掉前缀lib),设置库所在路径;
另外,附加选项中参数-Wl,-rpath=<库文件所在路径>设置后,生成的.out文件查找默认库的路径。
编译:
编译成功后会在工程本来所在的目录下生成.out文件;
会在vs自动生成的工程目录下生成.out文件;
用户可直接使用shell运行.out文件来验证,或者方便调试使用vs2017进行单步调试。
另外,虽然有vs2017进行交叉开发,但makefile才是回归的本源,vs2017只是作为辅助工具使用。
作为linux开发者还是需要对makefile有所掌握。这里贴出本人此工程的makefile,当vs2017无法完全运行工程的时候,或者条件不允许时,makefile才是正道:
CXX = g++ -std=c++11
OUT_NAME = QuoteRcv
#SRC_FILE = main.cpp CtpMgr.cpp CtpQuote.cpp PublicFuncs.cpp ShengliMgr.cpp ShengliQuote.cpp tinyxml2.cpp
#required libs
#include path
#setup the default lib path when run the out file
BFLAG = -D_LINUX -g -Wall
.PHONY: all all-before all-after clean clean-custom #main target
$(OUT_TARGET): $(OBJ_DEBUG_FILE)
$(OBJ_PATH)%.o : %.cpp
pre_all : |
附:
1. Vs调试时,如何设置当前工作目录问题:
为方便可设置为工程根路径: