http://blog.csdn.net/pipisorry/article/details/38512433

sudo make时#include "hdfs.h"出现include错误

fatal error: hdfs.h: No such file or directory

#include "hdfs.h"

也就是hdfs.h文件inclucd不进来

原因:

文件读取权限问题,$HADOOP_HOME/include目录是用户bdms安装的,则另一个普通用户如guest则不能读取,即使echo $CLASSPATH有这个目录。

解决:

使用super用户source配置文件,并在super用户下make

# vi bin/setenv

export CLASSPATH=$CLASSPATH:`$HADOOP_HOME/bin/hadoop classpath --glob`:$HADOOP_HOME/include

# . bin/setenv

# echo $CLASSPATH

...:/usr/local/java/hadoop-2.6.0/include

皮皮blog

g++无法使用数学库函数,abs() 函数无法找到

同样的一个源码, 如果保存成c文件, 用gcc编译可以通过和使用

如果用g++编译无法通过. 原因是abs() 函数无法找到?

解决:

#include <stdlib.h>

皮皮blog

C/C++避免同一个文件被include多次的两种方式

一种是#ifndef方式,一种是#pragma once方式:

方式一:
    #ifndef __SOMEFILE_H__
    #define __SOMEFILE_H__
    ... ... // 声明、定义语句
    #endif

方式二:

#pragma once

... ... // 声明、定义语句

#ifndef的方式受C/C++语言标准支持。它不光可以保证同一个文件不会被包含多次,也能保证内容完全相同的两个文件(或者代码片段)不会被不小心同时包含。
    当然,缺点就是如果不同头文件中的宏名不小心“撞车”,可能就会导致你看到头文件明明存在,编译器却硬说找不到声明的状况——这种情况有时非常让人抓狂。
    由于编译器每次都需要打开头文件才能判定是否有重复定义,在包含一个文件的时候,只有打开这个文件,根据文件的保护宏是否已经被定义来判断此文件是否已经被包含过,所以效率相对较低。

因此在编译大型项目时,ifndef会使得编译时间相对较长,因此一些编译器逐渐开始支持#pragma once的方式。

#pragma once一般由编译器提供保证:同一个文件不会被包含多次。注意这里所说的“同一个文件”是指物理上的一个文件,而不是指内容相同的两个文件。你无法对一个头文件中的一段代码作pragma once声明,而只能针对文件。

效率更高:因为不需要去打开包含的文件,就可以判断这个文件有没有被包含,当然这个工作是系统帮我们完成的。

其好处是,你不必再费劲想个宏名了,当然也就不会出现宏名碰撞引发的奇怪问题。大型项目的编译速度也因此提高了一些。
    对应的缺点就是如果某个头文件有多份拷贝,本方法不能保证他们不被重复包含。当然,相比宏名碰撞引发的“找不到声明”的问题,这种重复包含很容易被发现并修正。

#pragma once方式产生于#ifndef之后,目前看来#ifndef更受到推崇。因为#ifndef受C/C++语言标准的支持,不受编译器的任何限制;而#pragma once方式却不受一些较老版本的编译器支持,一些支持了的编译器又打算去掉它,所以它的兼容性可能不够好。一般而言,当程序员听到这样的话,都会选择#ifndef方式,为了努力使得自己的代码“存活”时间更久,通常宁愿降低一些编译性能。

还有一种用法是把两者放在一起的:

#pragma once
    #ifndef __SOMEFILE_H__
    #define __SOMEFILE_H__
    ... ... // 声明、定义语句
    #endif

看起来似乎是想兼有两者的优点。不过只要使用了#ifndef就会有宏名冲突的危险,也无法避免不支持#pragma once的编译器报错,所以混用两种方法似乎不能带来更多的好处,倒是会让一些不熟悉的人感到困惑。

在#include的时候,程序员也可以自己判断所要包含的文件的保护宏是否已经被定义,来决定是否要包含这个文件。类似下面的代码:

[cpp] view plaincopy
  1. #ifndef FILE_H_
  2. #include "file.h"
  3. #endif

这样作可以得到较高的效率,而且保证可移植性。但是文件之间的依赖性较高,如果一个文件的保护宏改变的话,所有使用如上形式包含这个文件的文件都要修改,有悖于模块化的思想。

附:如何保证使用的标识符在其他地方没有使用过?

/* things.h */
#ifndef THINGS_H_
        #define THINGS_H_
        ...
#endif

通常编译器提供商采用如下方法:用文件名作为标识符,并在文件名中使用大写字母。用下划线代替文件名中的句点符号,用下划线(可能两条下划线)作前缀和后缀。

所以,为了避免跟编译器提供的头文件相冲突,采取的方法是把编译器标识符去掉前缀,也就是前缀不用下划线,其他按照编译器的方法。上面的示例就是采用的这种方法。

[http://blog.csdn.net/holybin/article/details/28397157

http://zhangzhiyin1982.blog.163.com/blog/static/2899121720076259553175/

http://blog.csdn.net/hkx1n/article/details/4313303]

from: http://blog.csdn.net/pipisorry/article/details/38512433

ref:

include问题及错误解决相关推荐

  1. 在查找预编译头时遇到意外的文件结尾。是否忘记了向源中添加“#include stdafx.h”?错误解决办法

    VS中出现是否忘记了向源中添加"#include "stdafx.h""?的错误解决办法 经常在用VS来写项目时,会出现这一问题. 在经过相关资料的查阅之后,发 ...

  2. Centos系统上安装php遇到的错误解决方法集锦

    Centos系统上安装php遇到的错误解决方法集锦 1.configure: error: xml2-config not found. Please check your libxml2 insta ...

  3. 初学laravel migrate常见错误解决

    断断续续开始 laravel 入门学习,想整个简单的通讯录系统,设立了两个表,一个 branches ,一个 contacts.在创建 migration 文件的时候,没有考虑仔细,先把 contac ...

  4. PHP编译安装时常见错误解决办法,php编译常见错误

    PHP编译安装时常见错误解决办法,php编译常见错误 1.configure: error: xslt-config not found. Please reinstall the libxslt & ...

  5. Building MFC application with /MD[d] (CRT dll version) requires MFC shared dll version 错误解决

    Building MFC application with /MD[d] (CRT dll version) requires MFC shared dll version 错误解决 今天在VS201 ...

  6. 因为返回有true ajax提示进入错误,jquery ajax中error返回错误解决办法

    转自:https://www.jb51.net/article/72198.htm 进入百度搜索此问题,发现有人这么说了一句 Jquery中的Ajax的async默认是true(异步请求),如果想一个 ...

  7. linux libvpx编译安装,linux编译安装时常见错误解决办法

    **configure: error: xslt-config not found. Please reinstall the libxslt >= 1.1.0 distribution** 复 ...

  8. linux源码安装php缺少动态库,php源代码安装常见错误解决办法

    php源代码安装常见错误解决办法 错误:configure: error: libevent >= 1.4.11 could not be found 解决:yum -y install lib ...

  9. vmware安装ubuntu13版本的vm tools时遇到的错误解决

    vmware安装ubuntu13版本的vm tools时遇到的错误解决 vmware安装ubuntu13版本的vm tools时 遇到: Searching for a valid kernel he ...

  10. linux编译安装的报错,linux编译安装时常见错误解决办法

    This article is post on https://coderwall.com/p/ggmpfa 原文链接:http://www.bkjia.com/PHPjc/1008013.html ...

最新文章

  1. 区块链应用 | 区块链将永久改变法律行业的七种方式
  2. VCSA中配置时间和时区,实测至6.5适用
  3. android使用Activity
  4. qt 字体不随dpi_Windows – QT5字体渲染在各种平台上不同
  5. Http与WWW服务精解
  6. C#创建桌面快捷方式
  7. dsu on tree 题集 + ac代码
  8. 移动应用开发——作业3
  9. VMware中让虚拟机支持虚拟化
  10. 阿里云CentOS7.3配置Java Web应用和Tomcat步骤
  11. IntelliJ 中类似于Eclipse ctrl+o的是ctrl+F12
  12. HeadFirstJava——6_Java API
  13. 数学分析教程(科大)——1.3笔记+习题
  14. 视频剪辑素材哪里找?这个几个网站就够了。
  15. wpsppt怎样让图片模糊_PPT怎么设置图片由模糊到清楚?
  16. 三维空间任意一点绕任意轴线旋转
  17. Windows下访问Ubuntu虚拟机中的Samba服务器遇到“\\192.168.71.128无法访问,您可能没有权限访问网络资源。请与这台服务器的管理员联系以查明您是否有访问权”的问题
  18. 解锁三星bl锁有几种方法_如何判断三星手机bootloader是否解锁_免费解锁BL的3个方法...
  19. 使用cmd命令导入导出数据库
  20. go语言打包生成更小的体积

热门文章

  1. swift 运算符快速学习(建议懂OC或者C语言的伙伴学习参考)
  2. (一)Nand FLASH 原理讲解
  3. 杭电 看归并排序和快速排序
  4. 存储过程中“ 警告: 聚合或其他 SET 操作消除了 Null 值” 导致错误的解决
  5. Liferay中配置MySQL数据库的两种方法
  6. 面向对象 “上”
  7. 牛客网 牛客小白月赛2 H.武-最短路(Dijkstra)
  8. maven项目的创建
  9. 使用 JavaScript File API 实现文件上传
  10. 使用 Anthem.NET 的常见回调(Callback)处理方式小结