当前位置: 技术问答>linux和unix
请问只有变量只有extern 形式 但是删去extern 之后 会有 multiple defination error
来源: 互联网 发布时间:2016-06-02
本文导语: 最近看一个sip客户端(sipp)软件代码,看到这个现象不是很懂,究竟什么原因阿,具体的在 sipp.sourceforge.net/ 有源码。比如 grep userFree ./ -r Binary file ./sipp.o matches ./sipp.cpp: freeUsers.push_front(userid); ./sipp.cpp: ...
最近看一个sip客户端(sipp)软件代码,看到这个现象不是很懂,究竟什么原因阿,具体的在 sipp.sourceforge.net/ 有源码。比如 grep userFree ./ -r
Binary file ./sipp.o matches
./sipp.cpp: freeUsers.push_front(userid);
./sipp.cpp: userid = freeUsers.back();
./sipp.cpp: freeUsers.pop_back();
./sipp.cpp: freeUsers.push_back(i);
./call.cpp: freeUsers.push_front(userId);
Binary file ./call.o matches
./sipp.hpp:extern list freeUsers;
只有 freeUsers extern 形但是去掉 extern 就多重定义了。
Binary file ./sipp.o matches
./sipp.cpp: freeUsers.push_front(userid);
./sipp.cpp: userid = freeUsers.back();
./sipp.cpp: freeUsers.pop_back();
./sipp.cpp: freeUsers.push_back(i);
./call.cpp: freeUsers.push_front(userId);
Binary file ./call.o matches
./sipp.hpp:extern list freeUsers;
只有 freeUsers extern 形但是去掉 extern 就多重定义了。
|
源代码中是不是有一些本来就没有.c程序,直接给了.o或者是.lib这样
也就是说在别的程序里已经编译好了的
或者这个是操作系统某个系统库中的变量?
也就是说在别的程序里已经编译好了的
或者这个是操作系统某个系统库中的变量?
|
extern list freeUsers;
如果在所有源码中 grep freeUsers 不到,那么貌似就一定在预编译好的库或者 *.o 中...
|
回复10:
例如:全局变量_stcklen、_heaplen等的费用
extern unsigned _stcklen=8000
当然还有_argc,_argv两全局变量。
他们都应该是在obj(库)中声明(开辟)了。
例如:全局变量_stcklen、_heaplen等的费用
extern unsigned _stcklen=8000
当然还有_argc,_argv两全局变量。
他们都应该是在obj(库)中声明(开辟)了。
|
源码不是你自己写的,那你就别把extern去掉了.
或者可以搜索一下该变量所有相关的的声明.
或者可以搜索一下该变量所有相关的的声明.