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

    今天帮朋友从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




评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值