2.6 visual studio開發(fā)linux程序

2.6.1 前言

? ? ? ?在linux環(huán)境下開發(fā)C++程序佩番,除了需要掌握C++的知識(shí)外,還需要掌握如何寫makefile和使用GDB進(jìn)行調(diào)試罢杉,這對(duì)于不熟悉makefile和GDB的開發(fā)人員是比較麻煩的趟畏,目前vs2015及以上的版本能夠支持linux c++程序的開發(fā)和調(diào)試,與傳統(tǒng)vs上的windows編程不同的是滩租,vs所需要的Linux環(huán)境需要搭載在一個(gè)linux的服務(wù)器上赋秀,vs相當(dāng)于將windows系統(tǒng)和這個(gè)linux系統(tǒng)之間建立了某種映射,可以將代碼復(fù)制到linux中對(duì)應(yīng)的目錄中律想,并且windows系統(tǒng)中的vs能夠看到運(yùn)行的情況猎莲,甚至是對(duì)代碼進(jìn)行斷點(diǎn)調(diào)試,方便了在windows環(huán)境下的開發(fā)人員技即。

2.6.2 開發(fā)環(huán)境

在開發(fā)之前我們需要特定的環(huán)境和安裝一些必須的軟件:

1.環(huán)境:win7及以上版本的操作系統(tǒng)著洼,CentOS或ubuntu等任何一種linux操作系統(tǒng);

2.安裝軟件:windows操作系統(tǒng)上安裝VS2015及以上版本而叼;linux系統(tǒng)上安裝gcc身笤、g++和gdbserver,ssh-server軟件;

環(huán)境的準(zhǔn)備和依賴軟件的安裝請(qǐng)網(wǎng)上搜索自行安裝葵陵,這里就不詳細(xì)介紹液荸。

注意:

(1).安裝vs的時(shí)候我們除了安裝一些基本的開發(fā)組件外,還需要安裝c++的linux開發(fā)組件脱篙,如下圖:

linux組件

(2).在linux系統(tǒng)上安裝好ssh軟件后娇钱,需要啟動(dòng)ssh-server服務(wù)伤柄,保證編譯程序時(shí),能將windows系統(tǒng)下的代碼成功復(fù)制到linux中對(duì)應(yīng)的目錄中文搂。

ssh-server服務(wù)的啟動(dòng)命令:

CentOS系統(tǒng) : systemctl start sshd

redhat系統(tǒng) : service sshd start

ubuntu系統(tǒng) : service ssh start

2.6.3 創(chuàng)建簡(jiǎn)單的linux工程

我們以vs2017創(chuàng)建工程在ubuntu系統(tǒng)中運(yùn)行為例:

1.創(chuàng)建一個(gè)linux平臺(tái)的空項(xiàng)目适刀,vs界面中選擇:文件->新建->項(xiàng)目,然后彈出下面的對(duì)話框细疚,開始新建工程蔗彤;

新建項(xiàng)目

2.配置遠(yuǎn)程環(huán)境,這是我們程序運(yùn)行的linux環(huán)境疯兼,需要在配置ssh遠(yuǎn)程登錄然遏;

vs界面中選擇:工具->選項(xiàng)->跨平臺(tái)->連接管理器,界面如下圖所示:

配置ssh登錄

添加ssh遠(yuǎn)程登錄連接配置:點(diǎn)擊添加按鈕吧彪,界面如下:

ssh配置

配置成功后待侵,需要設(shè)置遠(yuǎn)程的存放代碼的目錄,即windows系統(tǒng)下的代碼復(fù)制到linux中對(duì)應(yīng)的目錄姨裸;

工程設(shè)置
遠(yuǎn)程目錄設(shè)置

3.創(chuàng)建工程代碼文件秧倾,創(chuàng)建一個(gè)test.cpp文件,寫上經(jīng)典的打印“Hello,World!”傀缩;

hello工程

調(diào)試運(yùn)行之前那先,我們需要調(diào)出Linux 控制臺(tái)窗口;

vs界面中選擇:調(diào)試->Linux 控制臺(tái)

啟動(dòng)調(diào)試后赡艰,界面如下;

調(diào)試配置

程序在編譯售淡,運(yùn)行之前會(huì)把windows系統(tǒng)下的代碼復(fù)制到linux中對(duì)應(yīng)的目錄,如下圖所示:

代碼目錄設(shè)置
代碼

2.6.4 創(chuàng)建有依賴庫(kù)的linux工程

以訪問boost庫(kù)的日期為例介紹如何調(diào)試并運(yùn)行程序:

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.添加依賴庫(kù)的文件目錄

庫(kù)目錄設(shè)置

4.添加依賴庫(kù)的庫(kù)文件名稱

添加依賴庫(kù)

5.完成了以上的步驟慷垮,編譯程序成功揖闸,但在運(yùn)行的時(shí)候會(huì)報(bào)錯(cuò);如下圖所示:

錯(cuò)誤信息

因?yàn)槌绦蜃罱K還是在linux系統(tǒng)中運(yùn)行的料身,而使用vs2017做調(diào)試汤纸,只是與linux系統(tǒng)做了某種映射,使調(diào)試結(jié)果芹血,運(yùn)行結(jié)果在vs界面展示出來(lái)贮泞,所以我們需要在linux系統(tǒng)設(shè)置依賴庫(kù)的查找路徑。

linux下設(shè)置動(dòng)態(tài)庫(kù)的查找路徑一般有以下三種方式:

(1).使用export LD_LIBRARY_PATH=XXX祟牲,這種方式在退出當(dāng)前終端后就失效

export LD_LIBRARY_PATH=/root/opt/boost/lib:

(2).修改~ /.bashrc或~/.bash_profile或系統(tǒng)級(jí)別的/etc/profile中LD_LIBRARY_PATH的路徑隙畜;

在文件中添加export LD_LIBRARY_PATH=/root/opt/boost/libsource

命令可以用于重新執(zhí)行剛修改的初始化文件,使之立即生效说贝,而不必注銷并重新登錄

source .bashrc 或者 source /etc/profile

(3).在/etc/ld.so.conf文件中添加庫(kù)的搜索路徑议惰,這種方式不受用戶的限制

在/etc/ld.so.conf下面加一行/root/opt/boost/lib

然后執(zhí)行命令 /sbin/ldconfig 會(huì)更新搜索路徑到 /etc/ld.so.cache,此文件保存已排好序的動(dòng)態(tài)鏈接庫(kù)名字列表乡恕;

程序運(yùn)行時(shí)的搜索目錄會(huì)從默認(rèn)搜尋目錄(/lib和/usr/lib)以及動(dòng)態(tài)庫(kù)配置文件/etc/ld.so.conf內(nèi)所列的目錄下,搜索出可共享的動(dòng)態(tài)鏈接庫(kù)(格式如前介紹,lib*.so*),進(jìn)而創(chuàng)建出動(dòng)態(tài)裝入程序(ld.so)所需的連接和緩存文件言询。

6.在linux系統(tǒng)中修改程序的查找路徑

使用方式一設(shè)置查找路徑后俯萎,依然報(bào)錯(cuò),因?yàn)榉绞揭皇桥R時(shí)的設(shè)置方式运杭,只對(duì)當(dāng)前終端生效夫啊;

使用方式二,方式三設(shè)置后辆憔,程序能正常調(diào)試運(yùn)行撇眯;

如下圖所示:

運(yùn)行界面

2.6.5 總結(jié)

1.使用vs2017做調(diào)試,只是與linux系統(tǒng)做了某種映射虱咧,使調(diào)試結(jié)果熊榛,運(yùn)行結(jié)果在vs界面展示出來(lái)。?

2.程序編譯時(shí)腕巡,如果不能把代碼拷貝到linux中設(shè)置的遠(yuǎn)程目錄下玄坦,則可能是ssh服務(wù)沒有啟動(dòng)。?

3.程序調(diào)試運(yùn)行時(shí)绘沉,如果找不到需要鏈接的庫(kù)煎楣,則需要在linux系統(tǒng)中加入依賴庫(kù)的查找路徑。?

鏈接

星河公鏈官網(wǎng)

2.6 visual studio開發(fā)linux程序 - arm_snow的博客 - CSDN博客

2.6 visual studio開發(fā)linux程序-wx5ca1790914ac4的博客-51CTO博客

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末车伞,一起剝皮案震驚了整個(gè)濱河市择懂,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌另玖,老刑警劉巖休蟹,帶你破解...
    沈念sama閱讀 217,185評(píng)論 6 503
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異日矫,居然都是意外死亡,警方通過(guò)查閱死者的電腦和手機(jī)绑榴,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,652評(píng)論 3 393
  • 文/潘曉璐 我一進(jìn)店門哪轿,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái),“玉大人翔怎,你說(shuō)我怎么就攤上這事窃诉。” “怎么了赤套?”我有些...
    開封第一講書人閱讀 163,524評(píng)論 0 353
  • 文/不壞的土叔 我叫張陵飘痛,是天一觀的道長(zhǎng)。 經(jīng)常有香客問我容握,道長(zhǎng)宣脉,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,339評(píng)論 1 293
  • 正文 為了忘掉前任剔氏,我火速辦了婚禮塑猖,結(jié)果婚禮上竹祷,老公的妹妹穿的比我還像新娘。我一直安慰自己羊苟,他們只是感情好塑陵,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,387評(píng)論 6 391
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著蜡励,像睡著了一般令花。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上凉倚,一...
    開封第一講書人閱讀 51,287評(píng)論 1 301
  • 那天兼都,我揣著相機(jī)與錄音,去河邊找鬼占遥。 笑死俯抖,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的瓦胎。 我是一名探鬼主播芬萍,決...
    沈念sama閱讀 40,130評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼搔啊!你這毒婦竟也來(lái)了柬祠?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 38,985評(píng)論 0 275
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤负芋,失蹤者是張志新(化名)和其女友劉穎漫蛔,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體旧蛾,經(jīng)...
    沈念sama閱讀 45,420評(píng)論 1 313
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡莽龟,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,617評(píng)論 3 334
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了锨天。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片霍比。...
    茶點(diǎn)故事閱讀 39,779評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡策橘,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情辩尊,我是刑警寧澤划乖,帶...
    沈念sama閱讀 35,477評(píng)論 5 345
  • 正文 年R本政府宣布蒂胞,位于F島的核電站纸泄,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏幅慌。R本人自食惡果不足惜宋欺,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,088評(píng)論 3 328
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧迄靠,春花似錦秒咨、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,716評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至吠式,卻和暖如春陡厘,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背特占。 一陣腳步聲響...
    開封第一講書人閱讀 32,857評(píng)論 1 269
  • 我被黑心中介騙來(lái)泰國(guó)打工糙置, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人是目。 一個(gè)月前我還...
    沈念sama閱讀 47,876評(píng)論 2 370
  • 正文 我出身青樓谤饭,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親懊纳。 傳聞我的和親對(duì)象是個(gè)殘疾皇子揉抵,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,700評(píng)論 2 354

推薦閱讀更多精彩內(nèi)容

  • 一、Python簡(jiǎn)介和環(huán)境搭建以及pip的安裝 4課時(shí)實(shí)驗(yàn)課主要內(nèi)容 【Python簡(jiǎn)介】: Python 是一個(gè)...
    _小老虎_閱讀 5,744評(píng)論 0 10
  • 一嗤疯、溫故而知新 1. 內(nèi)存不夠怎么辦 內(nèi)存簡(jiǎn)單分配策略的問題地址空間不隔離內(nèi)存使用效率低程序運(yùn)行的地址不確定 關(guān)于...
    SeanCST閱讀 7,808評(píng)論 0 27
  • 2.5.1 前言 Visual Studio在調(diào)試c++程序時(shí)冤今,調(diào)式信息通是過(guò)界面的方式展示出來(lái)的,這很方便...
    星河公鏈閱讀 596評(píng)論 1 2
  • 動(dòng)態(tài)鏈接茂缚,在可執(zhí)行文件裝載時(shí)或運(yùn)行時(shí)戏罢,由操作系統(tǒng)的裝載程序加載庫(kù)。大多數(shù)操作系統(tǒng)將解析外部引用(比如庫(kù))作為加載過(guò)...
    小5筒閱讀 5,504評(píng)論 0 3
  • “UNIX 是簡(jiǎn)單的脚囊,你不需要成為天才也能理解這種簡(jiǎn)單龟糕。” 由于GNU/Linux這個(gè)詞太長(zhǎng)悔耘,下面如果沒有特別指明...
    洋蔥17閱讀 940評(píng)論 0 8