日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > linux >内容正文

linux

vs2019编写Linux c/c++项目

發布時間:2023/11/30 linux 30 豆豆
生活随笔 收集整理的這篇文章主要介紹了 vs2019编写Linux c/c++项目 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

最近一直在閱讀ovs的源碼,看到用戶態代碼的時候,需要對用戶態的代碼進行調試,一開始想直接使用linux中的GDB進行調試,但是ovs的工程太過于復雜,從網上找了些文章,發現vs2017能夠支持linux c++程序的調試,搗鼓了一下午,遇到了一些坑,終于搭建好了開發環境。

最新版的vs 2017支持linux環境編程,與傳統vs上的windows編程不同的是,vs2017 所需要的Linux環境需要搭載在一個linux的服務器上,vs 2017 相當于將windows系統和這個linux系統之間建立了某種映射,可以將代碼復制到linux中對應的目錄中,并且windows系統中的vs 2017能夠看到運行的情況,甚至是對代碼進行斷點調試。

開發環境

window 10操作系統,vs 2017 community版,VMware12.5.7

在VMware中安裝ubuntu14桌面版

vs 2017的安裝

官網下載地址https://visualstudio.microsoft.com/zh-hans/?rr=https%3A%2F%2Fwww.microsoft.com%2Fzh-cn%2F

從官網下載最新的vs 2017,在安裝的過程中需要注意,如果你需要搭建linux c++環境,需要勾選“使用c++的linux開發”工具集,見下圖

配置ubuntu環境

在ubuntu中安裝好c++環境,因為vs 2017需要通過ssh登陸ubuntu系統,所以也需要安裝好ssh服務,命令如下:

sudo apt-get install openssh-server g++ gdb gdbserver

開始ssh服務:

sudo service ssh start

vs2017創建linux項目

打開vs2017,步驟如下,文件-->新建項目-->跨平臺-->linux->控制臺應用程序(linux)

新建完成項目之后,vs2017自動生成一個簡單的maic.cpp文件

菜單欄選擇 調試->cross platform->add 將剛才建立的Ubuntu服務器用戶信息輸入進去

右鍵解決方案,可以看到當前程序的屬性頁面,點擊配置屬性->常規->遠程生成計算機,選擇剛剛新建的賬戶,可以看到,在該頁面下,默認的遠程生成根目錄在"~/projects"下面,待會兒可以看到在ubuntu對應的目錄下會生成項目的代碼。

菜單欄選擇調試->Linux Console打開linux程序的控制臺

可以在程序中打斷點,點擊調試按鈕進行運行,可以看到控制臺打印出信息

登陸ubuntu,在~/projects目錄下面可以看到新生成的項目文件夾“test”

遇到問題

上述是一個簡單的開發演示,在實際的工作中,代碼可能很復雜。因為這幾天在學習linux的IO多路復用機制,從網上找了一個稍微復雜的通信程序,代碼來自于博客https://www.cnblogs.com/Anker/p/3261006.html,源代碼有一處錯誤,需加上#include <arpa/inet.h>。這個程序的功能是客戶端向服務器發送信息,服務器接收輸出并原樣發送回給客戶端,客戶端接收到輸出到終端。其中使用一些linux中的庫文件。

問題1 無法找到庫文件

在博客https://www.cnblogs.com/xylc/p/6533716.html?&from=androidqq 看到一個解決方法,將ubuntu下面/usr/include、/usr/local/include等目錄復制到vs的linux header path(在我的機器中,地址為C:\Program Files (x86)\Microsoft Visual Studio\2017\Community\Common7\IDE\VC\Linux\include\usr)。

問題2 gdbserver模式無法使用

vs2017進行調試有兩種方式,gdb和gdb-server,可以在菜單欄 調試->配置屬性->調試->調試模式中進行配置,關于這兩種模式的不同,官方文檔的解釋如下:

  • 在“gdbserver”模式中,GDB 在本地運行,連接到在遠程系統上運行的 gdbserver。 請注意,這是 Linux 控制臺窗口唯一支持的模式。
  • 在“gdb”模式中,Visual Studio 調試器驅動遠程系統上的 GDB,如果 GDB 的本地版本與目標計算機上安裝的版本不兼容,則遠程系統上的 GDB 更易兼容。 |

從網上找了很多的資料,重新更新了ubuntu中的gdbserver,結果還是不行,因為我之前使用的是ubuntu17的server版本,無奈使用ubuntu14的桌面版,問題立馬得到解決,目前仍然不知道gdbserver模型為什么無法使用,如果有路過的大神看到,希望評論區可以留言。

問題3 錯誤Stopped (tty input)

在運行gdb模式下運 行客戶端的時候,客戶端從控制臺接受數據的那一段代碼報Stopped (tty input)錯誤,通過看官方文檔發現gdb模式不支持控制臺交互,改成gdbserver模式后能正常使用。

最終運行結果

最終成功運行服務端和客戶端程序,先啟動服務端,再運行客戶端,下圖中分別為服務端和客戶端運行情況。當客戶端再控制臺輸入信息,服務端能接收,并回傳給客戶端在控制臺顯示。

參考資料

部署、運行和調試 Linux 項目
使用Visual Studio 2017作為Linux C++開發工具

作者:yearsj
轉載請注明出處:https://www.cnblogs.com/yearsj/p/9600682.html

?

因為當時寫的是C項目,但是VS默認都是C++項目,即使你把源文件改成.c編譯也是按C++編譯,所以,兩種方法,一種,Windows搭建gcc編譯環境,或者Linux編譯

?

在編譯C語言時有時會遇到這樣的錯誤提示:

'true' undeclared (first use in this function) or `false' undeclared (first use in this function)

就是說 bool, true, false 都是undeclared,原因很簡單,因為真正的C中沒有這些關鍵字,c和早期的c++里沒有關鍵字bool,使用BOOL可以,但BOOL不是內置類型了,都是通過typedef或者宏來定義的,通常都會被定義成int類型。后來的c++出現了內置類型bool,值只能為true(1)和false(0)。

解決方法:

1、將文件名.c改為文件名.cpp,用C++方式編譯則沒問題
2、自己進行一個宏定義:
typedef enum __bool { false = 0, true = 1, } bool;
c90是沒有bool的,因此支持c90的dev-c++當然也沒有。想在c90里用bool,可以自行用宏進行定義。
c99支持bool,用支持c99的編譯器例如gcc就可以的。

?
  • #include <stdio.h>

  • typedef enum __bool { false = 0, true = 1, } bool;

  • ?
  • void main()

  • {

  • bool b = true;

  • printf("%d\n",b);

  • bool c = false;

  • printf("%d\n",c);

  • }

  • 轉載于:https://www.cnblogs.com/muahao/p/7029113.html

    總結

    以上是生活随笔為你收集整理的vs2019编写Linux c/c++项目的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。