`
xitonga
  • 浏览: 587922 次
文章分类
社区版块
存档分类
最新评论

C/C++源码编译警示录

 
阅读更多

近几年,国内开源越闹越火,不仅软件开源,硬件也开源。去开源中国看看,已经有专门的硬件开源专区,61ic代码工厂提供了许多的硬件(ARM、DSP等)相关的代码。在这种趋势下,从头开始写一个软件或算法已经是上个世纪的事了,我们多多少少会从开源代码中借鉴点经验,甚至好的算法或中间件都会直接拿来用,当然,工程需要付费的就需要掏money了,不过提供开源免费代码的网站却还真不少,最有名的有sourceforgegithub。我常常从github上下载别人的代码,尽管github中的代码良莠不齐,但长尾理论的告诉我们:除了Linux这种牛逼排名靠前的优秀源代码外,那些star较低的Repositories中也有许多好的可供我们学习甚至可以直接在工程中使用的代码,但需要我们去发现。

哎哟,扯远了,回到正题……因为我们现在有太多可用的代码,我们不用从头编写,而要做的大部分工作都是移植(更专业点的叫重构),这里将持续地将自己移植工程(主要是C/C++工程)中遇到的问题及解决过程记录下来,“掘地三尺非一日之功”,这是一个积累的过程。


1. 出现大量的 linkerror #10056: symbol "_fann_set_scaling_params" redefined

【情况】

在链接一个神经网络的C语言库fann时,出现大量的类似上面redefined错误,错误原因很明显,_fann_set_scaling_params重复定义”,而我在工程里找遍了,发先确实都只在一处有定义。

【解释】

_fann_set_scaling_params是编译后.obj文件中的标识符号(symbol,一般这些符号开头带下划线),以上错误出现在链接的时候,这说明多个.obj文件中出现了_fann_set_scaling_params的定义。我们知道,C编译器是根据.c文件编译的(即一个.c文件生成一个.obj,c编译器不会主动去编译头文件)。而fann库有所不同,其中一个floatfann.c文件中有这样几行代码:

#include "fann.c"
#include "fann_io.c"
#include "fann_train.c"
#include "fann_train_data.c"
#include "fann_error.c"
#include "fann_cascade.c"
你没看错,c语言中也是可以包含.c文件的,包含的.c文件会当做共成文件也编译成.obj文件。这就明白了,我将上面包含的几个.c文件添加到了工程里面,而这里又包含了这几个.c文件,同一个.c文件编译了两次,当然会出现重复定义了。

【解决办法】

第一种方法,将上面使用include包含的.c文件从工程中移除,第二种方法,将上面的#include "**.c"注释掉,相应的源文件添加到工程中。

注:这是第一个问题,记得之前遇到过很多次类似的问题,每次都迷迷糊糊的弄了好久才解决,甚至程序编译通过后还迷迷糊糊不知道怎么就跑通了,真后悔没早作记录。这次在往DSP上移植fann时又遇到这个问题,谨记。

2.fatal error #5: could not open source file "fann.h"

【解释】

相对于上面的编译错误,这是链接错误,意思是说fann.h头文件打不开,要么压根就没有这个头文件(检查下头文件名有没有错误),要么就是头文件路径设置不对(编译器找到不头文件)。

【解决方法】

在确定有这个头文件的情况下,eclipse C/C++中解决问题的方法是,工程右键->Properities->Build->Compiler->Include Options,在-I选项中添加头文件所在目录。关于这一点,用过Linux下gcc编译器的就会对头文件搜索路径,库搜索路径这些内容特别敏感,因此,这里强烈推荐做软件(尤其是C/C++软件)的要学会gcc的使用,这对学会构建工程非常有用。


3. warning:#231-D:declarationisnotvisibleoutsideoffunction

【解释】

没有包含相关的头文件,将相关头文件包含就OK了



待增加中……



分享到:
评论

相关推荐

    二维码(QRcode)生成算法 C语言/C++源码

    #二维码(QRcode)生成算法 C语言/C++ 源码 1. 根据输入字符串识别编码模式; 2. 根据输入字符串长度选择合适的QRcode版本; 3. 将编码转换为二进制位流表示为数据码字; 4. 使用多项式生成纠错码; 5. 将数据码和...

    五子棋c/c++源码

    五子棋c/c++源码,五子棋c/c++源码

    c/c++源码浏览工具(卷2)

    c/c++源码浏览工具、可生成各种代码结构图、已破解! 软件大小53M,论坛只允许上传小于50的,因此使用好压分成两个卷!

    Pro*C/C++ 编程

    2.1、Pro*C/C++ 预编译环境 3 2.2、GCC 编译器 5 三、开始编写第一个Pro*C++代码 5 3.1、第一个Pro*C++代码 5 3.2、Pro*C++代码预编译 6 3.3、GCC 编译 7 3.4、最后测试 8 四、复杂一些的Pro*C/C++代码 8 4.1、代码...

    反编译工具(DLL 转c/c++ 工具)

    反编译工具(DLL 转c/c++ 工具); 内有工具使用说明。

    C语言/C++集成开发环境 Dev-C++

    C语言/C++集成开发环境 Dev-C++。一款优秀的C/C++集成开发软件。

    C语言/C++基础之爱心源码

    C语言/C++基础之爱心源码,适合初学C语言/C++的小伙伴学习研究,博客中有对应的讲解和演示,避免走弯路,费时费力。也真心希望能够帮助正在苦学C语言/C++ 程序设计的小伙伴们,你们的成长是我最大的幸福

    C/C++编译技术

    本上传pdf文件主要讲解C/C++编译技术,适合入门者阅读。

    C语言/C++基础之爱心程序源码

    C语言/C++基础之爱心程序源码,适合初学C语言/C++的小伙伴学习研究,博客中有对应的讲解和演示,避免走弯路,费时费力。也真心希望能够帮助正在苦学C语言/C++ 程序设计的小伙伴们,你们的成长是我最大的幸福

    C语言/C++基础之冰墩墩源码

    C语言/C++基础之冰墩墩源码,适合初学C语言/C++的小伙伴学习研究,博客中有对应的讲解和演示,避免走弯路,费时费力。也真心希望能够帮助正在苦学C语言/C++ 程序设计的小伙伴们,你们的成长是我最大的幸福

    C语言/C++基础之圣诞树源码

    C语言/C++基础之圣诞树源码,适合初学C语言/C++的小伙伴学习研究,博客中有对应的讲解和演示,避免走弯路,费时费力。也真心希望能够帮助正在苦学C语言/C++ 程序设计的小伙伴们,你们的成长是我最大的幸福

    最新C/C++源码大集合打包下载

    C常用算法程序集源码、C++经典数值算法源码、C语言程序设计教程源代码、C语言程序设计实训源代码、C语言计算器、注册表操作、《C语言精彩编程百例》源代码、STL标准库源码、游戏编程指南 配套代码、 C/C++程序员实用...

    基于C/C++ 的 DHCP 源码

    基于C/C++ 的 DHCP 源码 详细过程

    C语言/C++基础之绘制图钉画源码

    C语言/C++基础之绘制图钉画源码,适合初学C语言/C++的小伙伴学习研究,博客中有对应的讲解和演示,避免走弯路,费时费力。也真心希望能够帮助正在苦学C语言/C++ 程序设计的小伙伴们,你们的成长是我最大的幸福

    c/c++中文帮助文档(API)

    c/c++中文帮助文档(API),包含c和c++所有的库函数

    C/C++程序设计学习与实验系统 V2008.13.part1

    课程设计指导、课程设计源程序、 Visual C++6.0中英文编译错误信息同步显示功能(并配有同步的60多个语法错误程序实例)、Turbo C++3.0常见编译错误信息、 Turbo C2.0 中英文编译错误信息同步显示功能、C语言专业词汇...

    编译原理课程设计 词法分析 C语言/c++版

    编译原理课程设计之一用编程语言实现词法分析,用C++实现 注释清楚详细,程序风格良好 /*目前实现的功能有: */ /* 0.课程要求的词法分析基本功能 */ /* 1.识别用户定义的初次定义的变量还是已经定义的变量还是错误...

    几种内存池的实现(c/c++ 源码)

    几种 内存池 的实现 (c/c++ 源码)

    MinGW64与32——C/C++快速配置编译环境

    为了考虑到程序兼容性,通常我们编译C/C++程序会编译32位和64位两个版本,像VisualStudio,devcpp这类集成开发环境确实不用自己设置就能做到,但是他们都有不方便的地方,如VisualStudio的占用空间太大,如果初学C/...

    android下的C/C++代码编译工具

    C/C++代码编译工具,在eclipse环境下集成,方便快捷。

Global site tag (gtag.js) - Google Analytics