Windows下C++程序移植到Linux上的几个问题及解决方法

独自空忆成欢 提交于 2019-12-05 16:54:01

    今天帮朋友从Windows下移植一个小程序到Linux下,遇到了两个问题,在这里分享一下解决方法。

    刚开始觉得,移植应该很简单,就是重新再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、第二个问题是怎么样使用C++11的库。

     我们知道,现在C++11标准已经使用很多了。那我们怎样在编译的时候指定使用C++11标准呢?

     这里说两种情况:

     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



易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!