在对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的。
评论