码迷,mamicode.com
首页 > 系统相关 > 详细

Visual studio 2015程序转Eclipse gun编译出现的问题总结

时间:2016-05-01 14:46:11      阅读:230      评论:0      收藏:0      [点我收藏+]

标签:

Visual studio 2015程序Eclipse gun编译问题总结


1C++11支持

1Project settings

project右键-> c/c++ build ->Settings -> GCC C++ Compiler -> Miscellaneous -> Other flags后面加上 -std=c++11

2Workspace settings

Window-> Preference -> Build -> Settings ->Discovery -> CDT GCC Built-in Compiler Settings MinGW(shared) ->(command to get compiler specs) ${COMMAND} -E -P -v -dD "${INPUTS}" -std=c++11

技术分享



2Ubuntuboost库的编译安装步骤及卸载方法详解


最近由于编译一个程序用到了C++boost库,所以便安装了这个库。但是,其中遇到了一些小问题。所以记录下来,以供别人参考。


首先说一下我的环境:Ubuntu 14.04 64bit, gcc (Ubuntu 4.8.4-2ubuntu1~14.04.1) 4.8.4


其实在ubuntu下,可以用一下命令直接安装


sudo apt-get install libboost-all-dev //完全安装所有boost



sudo apt-get install aptitude

aptitude search boost


apt-get install PACKAGE_NAME


Is the command used to install any package you know the name for, like aptitude.

sudo is used to earn root access and be able to install and remove software. sudo is always required if you do system wide changes like installing, removing, updating and upgrading packages.


apt-get


Is the command used to manage any software and software sources. install is an extra command that tells the computer that you want to install software with the package name as follows. It will then check the software sources for a download link with the same name and then download and install the latest version (or specified version).


update


will update the sofware sources with new versions of the software listed (not installing anything)


upgrade


upgrades the software if new versions are available in the software sources.


remove


removes the package name specified after (like install).


there are more useful commands, but these are necessary for getting started with managing software from the terminal.


Aptitude

The command apt-get install aptitude will install a graphical package manager called aptitude.


Aptitude is a famous package manager with a ncurses GUI. I prefer it over the other package managers, since it is faster(IMHO) and the conflict management system works very well.


After more research on aptitude i found out that it‘s already installed. So installing aptitude wouldn‘t resolve in anything besides errors in the conosle. Start aptitude by:


sudo aptitude


The aptitude package is a GUI version of the apt-get command, it hasn‘t got the full set of features as apt-get but you have the basics like, remove, update, upgrade, install, etc. More information about aptitude and it features can be found here.


Also search in the software center if you want o use a GUI to find and install/uninstall applications.



安装后查看libboost-dev版本

root@ubuntu:~# dpkg -s libboost-dev | grep ‘Version‘

Version: 1.54.0.1ubuntu1

root@ubuntu:~#

安装后的目录:

1include

技术分享

2libso动态链接库文件所在目录)

技术分享

3)需要包含libboost_system.solibboost_serialization.so

Add的时候,要去掉前缀“lib”和扩展名“.so”

技术分享


boost安装常用的几个依赖文件(完全安装时,这些依赖库应该可以自动被安装):

apt-get install mpi-default-dev  #安装mpi

apt-get install libicu-dev     #支持正则表达式的UNICODE字符集

apt-get install python-dev     #需要python的话

apt-get install libbz2-dev


下载特定版本手动安装:

1.下载boost1.53源文件http://sourceforge.net/projects/boost/files/latest/download?source=dlp


2.解压后,进入boost_1_53_0目录,执行:


./bootstrap.sh


3.(重点)修改 tools/build/v2/user-config.jam文件,在最后面加上一行“using mpi ;”(注意mpi后面有个空格,然后一个分号 )


4. 执行:


./b2


(或者:

./bjam -a -sHAVE_ICU=1  #-a参数,代表重新编译,-sHAVE_ICU=1代表支持Unicode/ICU


5. 执行:


sudo ./b2 install


以上便是全部安装过程,因为网上提到的比较多,所以此处从略。重点想提的是第三步,务必记得。不过,如果你的程序不需要mpi这个功能,那也就不重要了。 应用默认设置即可。而且,第四步,执行时可以在后面加prefix参数,如果不加,装好后,默认的头文件在/usr/local/include /boost目录下。库文件在/usr/local/lib/目录下。默认不用修改。


如果编译好程序后,在运行时提示无法加载某个库文件,则把/usr/local/lib下的所有boost的库文件mv/usr/lib目录下就可以了。


默认安装头文件在目录/usr/local/include,而库文件在目录/usr/local/lib。卸载也很简单,直接将以上两个目录中有关boost的内容删除就可以了。


更多详情可参考boost官方网站:http://www.boost.org/



3localtimelocaltime_slocaltime_r

1)、localtime用来获取系统时间,精度为秒


#include <stdio.h>

#include <time.h>

int main(){

time_t time_seconds = time(0);

struct tm* now_time = localtime(&time_seconds);

printf("%d-%d-%d %d:%d:%d/n", now_time->tm_year + 1900, now_time->tm_mon + 1, now_time->tm_mday, now_time->tm_hour, now_time->tm_min, now_time->tm_sec);

}


函数原型为struct tm *localtime(const time_t * timep)


需要包含头文件:#include <time.h>

struct tm的结构为


int tm_sec; /* 秒 – 取值区间为[0,59] */

int tm_min; /* - 取值区间为[0,59] */

int tm_hour; /* - 取值区间为[0,23] */

int tm_mday; /* 一个月中的日期 - 取值区间为[1,31] */

int tm_mon; /* 月份(从一月开始,0代表一月) - 取值区间为[0,11] */

int tm_year; /* 年份,其值等于实际年份减去1900 */

int tm_wday; /* 星期 – 取值区间为[0,6],其中0代表星期天,1代表星期一,以此类推 */

int tm_yday; /* 从每年的11日开始的天数 – 取值区间为[0,365],其中0代表11日,1代表12日,以此类推 */

int tm_isdst; /* 夏令时标识符,实行夏令时的时候,tm_isdst为正。不实行夏令时的进候,tm_isdst0;不了解情况时,tm_isdst()为负。*/


2localtime_r也是用来获取系统时间,运行于linux平台下


函数原型为struct tm *localtime_r(const time_t *timep, struct tm *result);


#include <stdio.h>

#include <time.h>

int main(){

time_t time_seconds = time(0);

struct tm now_time;

localtime_r(&time_seconds, &now_time);

printf("%d-%d-%d %d:%d:%d/n", now_time.tm_year + 1900, now_time.tm_mon + 1, now_time.tm_mday, now_time.tm_hour, now_time.tm_min, now_time.tm_sec);

}


3localtime_s也是用来获取系统时间,运行于windows平台下,localtime_r只有参数顺序不一样


#include <iostream>

#include <time.h>

int main(){

time_t time_seconds = time(0);

struct tm now_time;

localtime_s(&now_time,&time_seconds);

printf("%d-%d-%d %d:%d:%d/n", now_time.tm_year + 1900, now_time.tm_mon + 1, now_time.tm_mday, now_time.tm_hour, now_time.tm_min, now_time.tm_sec);

}



为什么有了localtime还要有其他两个函数呢,因为localtime并不是线程安全的,观察localtimelocaltime_r的调用发现,localtime在使用时,我们只需定义一个指针,并不需要为指针申请空间,而指针必须要指向内存空间才可以使用,其实申请空间的动作由函数自己完成,这样在多线程的情况下,如果有另一个线程调用了这个函数,那么指针指向的struct tm结构体的数据就会改变。


localtime_slocaltime_r调用时,定义的是struct tm的结构体,获取到的时间已经保存在struct tm中,并不会受其他线程的影响。



4noexcept(true)

c++11标准之前,c++在函数声明中有exception specification(异常声明)的功能,用来指定函数可能抛出的异常类型。


voidFunc0() throw(runtime_error);

voidFunc1() throw();

voidFunc2();


函数Func0可能抛出runtime_error类型的异常;函数Func1不会抛出任何异常;函数Func2没有异常说明,则该函数可以抛出任何类型的异常。


如果函数抛出了没有在异常说明中列出的异常,则编译器会调用标准库函数unexpected。默认情况下,unexpected函数会调用terminate函数终止程序。


这种异常声明的功能很少使用,因此在c++11中被弃用。c++11引入noexcept,具体用法如下。


voidFunc3() noexcept;


noexcept的功能相当于上面的throw(),表示函数不会抛出异常。如果noexcept修饰的函数抛出了异常,编译器可以选择直接调用std::terminate()终止程序运行。noexceptthrow()效率高一些。


voidFunc4() noexcept(常量表达式);


如果常量表达式的结果为true,表示该函数不会抛出异常,反之则有可能抛出异常。不带常量表达式的noexcept相当于noexcept(true)


上面noexcept的用法是其作为修饰符时的用法,实际上noexcept还可以作为操作符,常用于模板中。


template <typename T>

voidfunc5() noexcept( noexcept(T()) ) {}


2noexcept就是一个操作符,如果其参数是一个有可能抛出异常的表达式,则返回值为false(func5noexcept(false),有可能会抛出异常),否则返回值为true(func5noexcept(true),不会抛出异常)


这样函数是否会抛出异常,可以由表达式进行推导,使得c++11更好的支持泛型编程。


noexcept被大量的使用在c++11的标准库中,用于提高标准库的性能,以及满足一些阻止异常扩散的需求。随便在c++11标准文档中搜索一下noexcept关键字,就知道它的应用有多广泛了。


c++11默认将delete设置成noexcept,这样可以提高应用程序的安全性,因为在析构函数中不应该抛出异常,而析构函数中经常会调用delete


voidoperator delete(void* ptr) noexcept;

voidoperator delete(void* ptr, const std::nothrow_t&) noexcept;

 

voidoperator delete[](void* ptr) noexcept;

voidoperator delete[](void* ptr, const std::nothrow_t&) noexcept;

 

voidoperator delete(void* ptr, void*) noexcept;

voidoperator delete[](void* ptr, void*) noexcept;


同样出于安全因素考虑,c++11将类的析构函数默认为noexcept(true)。但如果程序员显示的为析构函数指定noexcept(false),或者类的基类或成员有noexcept(false)的析构函数,则析构函数不会再保持默认值。


Visual studio 2015程序转Eclipse gun编译出现的问题总结

标签:

原文地址:http://www.cnblogs.com/zhousp/p/5450418.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!