Windowsの下でC++プログラムをLinuxに移植するいくつかの問題と解決方法

1412 ワード

今日はWindowsの下からLinuxの下に小さなプログラムを移植して、2つの問題に遭遇しました.ここで解決方法を共有します.
最初は、移植は簡単なはずだと思っていましたが、Linuxの次のコンパイルをやり直せばいいのです.しかし、多くの問題に直面しました.以下、一つ一つ説明します.
    1、fopen_s()関数エラー.
なぜならfopen_s()この関数は標準的なC++ライブラリの関数ではなく、マイクロソフト特有のものです.つまり、VSコンパイルを使うと問題はありませんが、Linuxのg++やgccを使うとエラーが発生します.
解決策はfopen()で代用します.詳細については、以下を参照してください.http://zhidao.baidu.com/link?url=8HhseVoTmwWpgmv-dsJyRjxt8sd1oJaqzZkJGzuJ_TKyNXbiEgs-EtPxie_xhfiwOY4uqojpKETCOugGZhrmCgt2pzLow2wq1urrVUCj0KS
FILE *fp;

fopen_s(&fp,BBC,"rb");
//    
fp = fopen(BBC,"rb");

2、2つ目の問題はC++11のライブラリをどのように使うかです.
C++11規格が多く使われていることを知っています.では、コンパイル時にC++11標準を使用することをどのように指定しますか?
ここでは2つの状況について説明します.
1、g++、-std=c++11を使用
g++ -std=c++11 test_slic.cpp slic.cpp -o test_slic.exe -L/home/sun/cmake/usr/lib/ -lopencv_core -lopencv_highgui -lopencv_imgproc -I/home/sun/Downloads/opencv-2.4.9/include -I/home/sun/cmake/t6/include

ここでは、-o出力のターゲットファイル、-Lがサードパーティライブラリに追加されたパス、-l(小文字L)サードパーティライブラリの名前(libopencv_core.soエラーに注意)、-I(大文字i)ヘッダファイル検索パスについて説明する.−L,−l,−Iは複数であり,後の経路との間にスペースがないことを示した.
2、Cmake使用set(CMAKE_CXX_STANDARD 11)
CMakeListsでtxtファイルにset(CMAKE_CXX_STANDARD 11)を付ければOK!簡単でしょう.
参照:http://stackoverflow.com/questions/10851247/how-to-activate-c-11-in-cmake
http://stackoverflow.com/questions/14180397/creating-makefile-with-libraries/14180540#14180540