功能void foo()
由两个dld1和D2导出。主程序链接到D1和D2并调用foo.
void foo();
int main()
{
foo();
}
在visual studio中编译和链接成功。当我运行程序时,我注意到D1的foo版本被调用了。
不应该visual studio给出一个链接错误,因为它发现两个匹配foo?在主程序的配置属性->链接器->命令行,我注意到它有D1。在D2.lib之前。这就是为什么D1的foo版本被链接到Main的原因吗(无论哪个在命令行上先出现,都可以确定地链接)?
要在.dll
或.lib
中调用函数,您需要包含包含函数定义的头文件。
在您的情况下,您确定只包含两个头文件中的一个,或者直接在cpp中编写函数原型。如果同时包含两个头文件,编译器会给出歧义调用错误。
如果您只包含两个头文件中的一个,并且编译器确定知道要调用哪个函数(例如使用某些#pragma comment(lib...)
,编译器将调用预期的函数)。
如果没有.dll
或.lib
的指示,编译器引用的头文件将调用第一个处理。