記一次Windows下的工程轉到Linux下2019年7月31日

Windows下工程的配置:vs2010+opengl+opencv2.4.3+C++boost庫1.53+eigen+vlfeat 0.9.16

需要轉到linux下

1、關於互斥鎖,window和linux對應的API:https://www.cnblogs.com/lvdongjie/p/4452256.html

2、#include<cstring> Linux中有strlen函數

3、linux下沒有strcat_s以及strcpy_s函數,對應的是strcat以及strcpy,這會限制strcpy_s緩存功能的使用。

4、windows下featrue.swap(vector<double>());linux下要vector<double>().swap(feature)

5、windows下的DWORD(也就是unsigned long)在linux沒有定義

6、windows下的gettickcount  linux下的clock_gettime

7、windows下的window.h linux下的#pragma comment(lib,"wsock32.lib")但是沒用到

8、winDef.h中max和min,Linux沒有相關定義可以用這個代替

#define max(a,b) (((a)>(b))?(a):(b))

9、對於opengl,linux下也可以用,GL/gl.h,然而有些gl的官方庫有問題,於是工程中就引入了openglut.h這個非官方庫,用的時候可以兩個庫一起用,但是會有衝突,需要把openglut_std.h中兩個衝突的函數註釋掉,具體的函數cmake會報錯進行提示。如果只用openglut.h這個庫,顯示字符不好用。

10、pthread_create函數是在linux下使用的創建線程的函數。

11、類中static類型的函數,調用的時候需要聲明類名稱(類名稱::函數)

12、windows下itoa函數,將int轉換成char,linux下用sprintf,例如:

char buffer[20];
int n=123;
sprintf(buffer,"%d",n);

13、windows下的sprintf_s到linux下,如果不指定緩衝區,可以直接換成sprintf。

14、linux下沒有getasynckeystate函數,實現方法可以參考,很好用,但是用的時候注意,只能定義一個kbhit函數,定義多了會有衝突。

15、windows下sleep()函數,形參是毫秒,linxu下<unistd.h>sleep形參是秒,usleep形參是微秒

16、windows下互斥鎖createMutex,linux下是pthread_mutex_t

17、linux下有dirent.h文件

18、opencv2XX版本有Nonfree函數,opencv3XX的沒有,搞了好久,還是妥協了,重新裝了opencv2.4.9

19、opencv的大坑,ROS自帶3.3.1!!!!!!!!!搞了好久。。。。還得在cmakelists中設置找opecnv2.4.9庫

20、_int64,linux下是long long

21、omp_get_num_procs@@OMP_1.0,這是什麼錯????自帶表情包???解決方法:library_link(_fopenmp)

22、vl庫問題,妥協了,編譯不過去,不會鏈接庫,只能把所有.c文件放入add_executable。

23、linux總是讀文件食栢了,後來發現讀的文件目錄下,有中文名稱的文件夾,cut除去就好了。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章