gcc链接异常 "multiple definition of `memchr .&quot

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;
}
仔细查下吧!

gcc链接异常 "multiple definition of `memchr .&quot

相关文章:

你感兴趣的文章:

标签云: