如何在动态链接中解决冲突

时间:2009-07-27 03:54:50

标签: dll linker global-variables conflict

XYZ.dll定义了一个全局变量int x。 ABC.c还定义了相同的全局变量int x。 如何将XYZ.dll链接到ABC.exe?全局命名空间中的这种冲突是如何解决的?

2 个答案:

答案 0 :(得分:1)

这是一个非常好的问题,我希望它得到一个真正的答案。根据我的收集,dll中的“全局”符号必须通过相关的头文件明确导入。如果你有两个相同的符号,那么在c文件中最后定义的符号是优先的符号。也就是说,如果您有ABC.c,并且在顶部,您将导入XYZ.h,然后定义int x。您要么从XYZ.h中删除int x,要么得到编译时错误。

答案 1 :(得分:0)

变量int x必须在XYZ的头文件中声明为extern int x。无论你打算使用这个变量,只需声明这个变量。就像ABC.c中的全局空间一样,声明这个变量就像int x;