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