正文

编译OSspecific时碰到的编译问题2009-03-23 18:16:00

【评论】 【打印】 【字体: 】 本文链接:http://blog.pfan.cn/bioexplore/41743.html

分享到:

在对OSspecific静态链接库进行编译时出现下列问题:
程序中的string.H与系统头文件string.H的冲突:
程序中的string.H位于../../src/OpenFOAM/lnInclude中,而系统的string.H位于 MingW\include中,在CodeBlocks工程文件中只定义了两个搜索路径即../../src/OpenFOAM/lnInclude和../../src/OSspecific/lnInclude,这样的话在进行编译时的编译过程出错:

In file included from C:/CodeBlocks/MinGW/bin/../lib/gcc/mingw32/3.4.5/../../../../include/c++/3.4.5/bits/char_traits.h:45,
                 from C:/CodeBlocks/MinGW/bin/../lib/gcc/mingw32/3.4.5/../../../../include/c++/3.4.5/string:47,
                 from ../../src/OpenFOAM/lnInclude/..\primitives\strings\string\string.H:51,
                 from ../../src/OpenFOAM/lnInclude/string.H:1,
                 from ../../src/OpenFOAM/lnInclude/..\primitives\strings\word\word.H:44,
                 from ../../src/OpenFOAM/lnInclude/word.H:1,
                 from ../../src/OpenFOAM/lnInclude/..\primitives\strings\fileName\fileName.H:48,
                 from ../../src/OpenFOAM/lnInclude/fileName.H:1,
                 from ../../src/OpenFOAM/lnInclude/..\primitives\Lists\fileNameList.H:36,
                 from ../../src/OpenFOAM/lnInclude/fileNameList.H:1,
                 from ../../src/OpenFOAM/lnInclude/..\include\OSspecific.H:40,
                 from ../../src/OpenFOAM/lnInclude/OSspecific.H:1,
                 from E:\Develop\OpenFOAM\CodeBlocks\src\OSspecific\MSWindows\Unix.C:34:
C:/CodeBlocks/MinGW/bin/../lib/gcc/mingw32/3.4.5/../../../../include/c++/3.4.5/cstring:79: error: `::memcpy' has not been declared
C:/CodeBlocks/MinGW/bin/../lib/gcc/mingw32/3.4.5/../../../../include/c++/3.4.5/cstring:80: error: `::memmove' has not been declared
C:/CodeBlocks/MinGW/bin/../lib/gcc/mingw32/3.4.5/../../../../include/c++/3.4.5/cstring:81: error: `::strcpy' has not been declared....................

这里的问题在于cstring中也包含了<string.H>(Line51),这里的string.H应该是系统头文件(位于MingW\include中),本应在系统头文件目录中找,但是却在../../src/OpenFOAM/lnInclude和../../src/OSspecific/lnInclude中找,结果找到的是位于../../src/OpenFOAM/lnInclude中的string.H,因而造成了上述编译错误.

如何改正这一问题呢,经过反复摸索终于被我搞定,就是修改cstring文件第Line51行:
原代码:#include <string.H>
修改后:#include_next <string.H>

经试验,经过上述修改后,程序便正常编译了,呵呵!

看来系统头文件也不是完全正确的,还是有bug的。

阅读(3224) | 评论(0)


版权声明:编程爱好者网站为此博客服务提供商,如本文牵涉到版权问题,编程爱好者网站不承担相关责任,如有版权问题请直接与本文作者联系解决。谢谢!

评论

暂无评论
您需要登录后才能评论,请 登录 或者 注册