两个dll导出相同的函数,其中一个被调用



功能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的指示,编译器引用的头文件将调用第一个处理。

最新更新