gcc链接错误 "multiple definition of `memchr ..."
这个问题不知道怎么解决,我先解释一下,我用automak编译器编译一个工程,当然工程里有   .c文件(是以前的存c代码),还有后增加的.cpp文件,   是c++代码,里面用到了stl的   list和map,大概描述一下,是这样的:   
 工程中有   decode.h,decode.c文件,存c代码, 
 有个      pm.h,pm.cpp   文件,c++代码, 
 pm.h文件头大概这样: 
 #include    <list>  
 using   namespace   std; 
 typedef   std::list <...>       PMXX; 
 class   ..   
 还有个   pc.h,pc.cpp文件 
 pc.cpp   开头大概这样: 
 #include    "decode.h " 
 #include    "pm.h "   
 问题出现了,编译通过,就是在链接的时候出现一堆错误: 
 multiple   definition   of   `memchr   ... 
 ...first   definition   ..      /usr/include/linux/...         std::memchr(...)   
 还有一些,都是说系统的一些api重复定义了,代码中是绝对没定义系统函数的,   
 后来发现,我把   pc.cpp文件中的   #include    "pm.h "   或者   #include    "decode.h "   任意一个注释掉,就链接通过了,但是一定要用这两个啊   ,找不到哪里的问题!! 
 不知道有哪位仁兄   遇到过这问题吗??   
------解决方案--------------------根据提示, memchr有多个定义.   
 我记得memchr是C的标准库函数呀.而你在自己写的代码中, 重新定义了这个函数, 所以出现这个错误, 把自己写的memchr函数改名应该就OK
------解决方案--------------------#include  <iostream>  
 #include  <string>  
 #include  <stdio.h>  
 #include  <list>    
 int main(int argc,char **argv) 
 { 
         std::list <std::string>  Test(3); 
         Test.push_back( "test one "); 
         Test.push_back( "test two "); 
         Test.push_back( "test three "); 
         std::list <std::string> ::iterator iTest=Test.begin(); 
         while ( iTest != Test.end() ) 
         { 
               std::cout  < < *iTest++  < <std::endl; 
         }   
         char *s= "Hello, Programmers! "; 
         char *p;     
         p=(char*)memchr(s, 'P ',strlen(s)); 
         if(p) 
           printf( "%s ",p); 
         else 
           printf( "Not Found! ");   
         getchar(); 
         return 0; 
 } 
 仔细查下吧!