1. 程式人生 > >Linux 部署C++音訊讀取方法程式碼遇到的問題:

Linux 部署C++音訊讀取方法程式碼遇到的問題:

參考連結:No such file or directory #include <io.h>
firstError: io.h: No such file

用命令查詢io.h所在位置:
find /usr/include -name “io.h”,
結果發現在/usr/include下沒有,但在/usr/include/x86_64-linux-gnu/sys 或者 /usr/include/sys 下有
這個取決於你的伺服器型別是ubuntu 還是 CentOS
第一種解決辦法——copy該標頭檔案到 /usr/include 目錄下:
這個方法可能需要 root 許可權 才能執行如下命令

用命令把io.h複製到/usr/include下:

sudo  cp /usr/include/x86_64-linux-gnu/sys/io.h  /usr/include
或者
sudo  cp /usr/include/sys/io.h  /usr/include

第二種解決辦法——修改標頭檔案的引入路徑(推薦):
本來我們引入為:

 #include <io.h>

修改為

 #include <sys/io.h>

對,講道理這種方法應該在生產環境下更合適些的吧!!!

second: fatal error: windows.h: No such file or directory


我這裡Windows 裡面引用了 #include <windows.h> ,使用下面的方法測量函式執行時間

#include <iostream>
#include <windows.h>
using namespace std;
void timeTest()
{
	for(int i =0;i<1000;i++)
		cout<<i<<endl; 
}

int main()
{
	long start_time = GetTickCount();
  	timeTest();
	long end_time = GetTickCount();
    cout << "Running Time:" << end_time - start_time << "ms" << endl;
}

程式碼遷移到Linux下報錯,找不到 windows.h。
於是選擇使用Linux下的另外一種測量函式執行時間的方法,使用 #include <time.h>標頭檔案,程式碼如下:

#include <iostream>
#include <time.h>
using namespace std;

void timeTest()
{
	for(int i =0;i<1000;i++)
		cout<<i<<endl; 
}

int main()
{
	clock_t start, ends;
	start = clock();
 	timeTest();
	ends = clock();
	cout << "Running Time: " << ends - start<<" ms" << endl;
}

最終準確的函式執行時間度量方法——推薦使用:
C++的<time.h>標頭檔案中有time和clock可以用來計算時間,但是“#include ”中提供了更加精確的統計時間的方法。
下面的程式碼支援Windows 和 Linux,但是要求編譯器必須支援C++11

#include <iostream>
#include <chrono>
using namespace std;
using std::chrono::high_resolution_clock;
using std::chrono::milliseconds;

void timeTest()
{
	for(int i =0;i<1000;i++)
		cout<<i<<endl; 
}

int main()
{
    high_resolution_clock::time_point beginTime = high_resolution_clock::now();
    
  	timeTest();
  
    high_resolution_clock::time_point endTime = high_resolution_clock::now();
    milliseconds timeInterval = std::chrono::duration_cast<milliseconds>(endTime - beginTime);
    cout << "Running Time:" << timeInterval.count()  << "ms" << endl;
}

third: error: ‘DIR’ was not declared in this scope
error: ‘opendir’ was not declared in this scope

引入標頭檔案 #include <dirent.h>
Linux下c++遍歷資料夾中檔案及讀取絕對路徑會用到這個標頭檔案
我的連結

fourth: error: scoped enums only available with -std=c++11 or -std=gnu++11
參考連結
需要 使用 在Linux 下 使用 C++ 11來編譯檔案,在 本身的 命令後面 新增 -std=c++11 即可

g++  test.cpp  main.cpp  -std=c++11

fifth: 我的cpp檔案上傳到Linux伺服器中文出現亂碼
中文註釋亂碼原因:windows系統的VS2017 cpp 檔案的編碼可能不是utf-8,需要設定一下檔案的編碼為utf-8
解決辦法:Vs2017設定檔案編碼為utf-8
參考連結