1. 程式人生 > >2.6 visual studio開發linux程序

2.6 visual studio開發linux程序

搭載 end 依賴 usr 軟件的安裝 vs2015 lib 6.4 點擊

2.6.1 前言

  在linux環境下開發C++程序,除了需要掌握C++的知識外,還需要掌握如何寫makefile和使用GDB進行調試,這對於不熟悉makefile和GDB的開發人員是比較麻煩的,目前vs2015及以上的版本能夠支持linux c++程序的開發和調試,與傳統vs上的windows編程不同的是,vs所需要的Linux環境需要搭載在一個linux的服務器上,vs相當於將windows系統和這個linux系統之間建立了某種映射,可以將代碼復制到linux中對應的目錄中,並且windows系統中的vs能夠看到運行的情況,甚至是對代碼進行斷點調試,方便了在windows環境下的開發人員。

2.6.2 開發環境

在開發之前我們需要特定的環境和安裝一些必須的軟件:
1.環境:win7及以上版本的操作系統,CentOS或ubuntu等任何一種linux操作系統;
2.安裝軟件:windows操作系統上安裝VS2015及以上版本;linux系統上安裝gcc、g++和gdbserver,ssh-server軟件;

環境的準備和依賴軟件的安裝請網上搜索自行安裝,這裏就不詳細介紹。

註意:
(1).安裝vs的時候我們除了安裝一些基本的開發組件外,還需要安裝c++的linux開發組件,如下圖:
技術分享圖片

(2).在linux系統上安裝好ssh軟件後,需要啟動ssh-server服務,保證編譯程序時,能將windows系統下的代碼成功復制到linux中對應的目錄中。

ssh-server服務的啟動命令:
CentOS系統 : systemctl start sshd
redhat系統 : service sshd start
ubuntu系統 : service ssh start

2.6.3 創建簡單的linux工程

我們以vs2017創建工程在ubuntu系統中運行為例:

1.創建一個linux平臺的空項目,vs界面中選擇:文件->新建->項目,然後彈出下面的對話框,開始新建工程;
技術分享圖片

2.配置遠程環境,這是我們程序運行的linux環境,需要在配置ssh遠程登錄;
vs界面中選擇:工具->選項->跨平臺->連接管理器,界面如下圖所示:

技術分享圖片

添加ssh遠程登錄連接配置:點擊添加按鈕,界面如下:
技術分享圖片

配置成功後,需要設置遠程的存放代碼的目錄,即windows系統下的代碼復制到linux中對應的目錄;
技術分享圖片
技術分享圖片

3.創建工程代碼文件,創建一個test.cpp文件,寫上經典的打印“Hello,World!”;
技術分享圖片

調試運行之前,我們需要調出Linux 控制臺窗口;
vs界面中選擇:調試->Linux 控制臺
啟動調試後,界面如下;
技術分享圖片

程序在編譯,運行之前會把windows系統下的代碼復制到linux中對應的目錄,如下圖所示:
技術分享圖片
技術分享圖片

2.6.4 創建有依賴庫的linux工程

以訪問boost庫的日期為例介紹如何調試並運行程序:

1.修改test.cpp的代碼如下:

#include <iostream>
#include <boost/date_time/gregorian/gregorian.hpp>

using namespace boost::gregorian;
using namespace std;

int main()
{
    date d(2019, 4, 20);
    cout << "date: " << to_iso_extended_string(d) << endl;
    return 0;
}

2.添加依賴的頭文件目錄
技術分享圖片

3.添加依賴庫的文件目錄
技術分享圖片

4.添加依賴庫的庫文件名稱
技術分享圖片

5.完成了以上的步驟,編譯程序成功,但在運行的時候會報錯;如下圖所示:
技術分享圖片

因為程序最終還是在linux系統中運行的,而使用vs2017做調試,只是與linux系統做了某種映射,使調試結果,運行結果在vs界面展示出來,所以我們需要在linux系統設置依賴庫的查找路徑。

linux下設置動態庫的查找路徑一般有以下三種方式:
(1).使用export LD_LIBRARY_PATH=XXX,這種方式在退出當前終端後就失效
export LD_LIBRARY_PATH=/root/opt/boost/lib:

(2).修改~ /.bashrc或~/.bash_profile或系統級別的/etc/profile中LD_LIBRARY_PATH的路徑;
在文件中添加export LD_LIBRARY_PATH=/root/opt/boost/lib
source命令可以用於重新執行剛修改的初始化文件,使之立即生效,而不必註銷並重新登錄
source .bashrc 或者 source /etc/profile

(3).在/etc/ld.so.conf文件中添加庫的搜索路徑,這種方式不受用戶的限制
在/etc/ld.so.conf下面加一行/root/opt/boost/lib
然後執行命令 /sbin/ldconfig 會更新搜索路徑到 /etc/ld.so.cache,此文件保存已排好序的動態鏈接庫名字列表;

程序運行時的搜索目錄會從默認搜尋目錄(/lib和/usr/lib)以及動態庫配置文件/etc/ld.so.conf內所列的目錄下,搜索出可共享的動態鏈接庫(格式如前介紹,lib.so),進而創建出動態裝入程序(ld.so)所需的連接和緩存文件。

6.在linux系統中修改程序的查找路徑
使用方式一設置查找路徑後,依然報錯,因為方式一是臨時的設置方式,只對當前終端生效;
使用方式二,方式三設置後,程序能正常調試運行;

如下圖所示:
技術分享圖片

2.6.5 總結

1.使用vs2017做調試,只是與linux系統做了某種映射,使調試結果,運行結果在vs界面展示出來。
2.程序編譯時,如果不能把代碼拷貝到linux中設置的遠程目錄下,則可能是ssh服務沒有啟動。
3.程序調試運行時,如果找不到需要鏈接的庫,則需要在linux系統中加入依賴庫的查找路徑。

2.6 visual studio開發linux程序