C++ MSVC 2015 GetComputerName未解决的外部符号问题
有三个动态链接库:A、B、C 库A在C++ MSVC 2015 GetComputerName未解决的外部符号问题,c++,visual-studio,winapi,C++,Visual Studio,Winapi,有三个动态链接库:A、B、C 库A在system命名空间中导出两个函数:IsRemoteSession()和GetComputerName() 库B与库a有静态链接,并使用这两种功能。没有链接错误 库C与库a有一个静态链接,并使用这两个函数。存在链接错误: LNK2019:调试和发布配置中未解析的外部符号“GetComputerName” B和C的项目属性相同 MSVC 2008中没有链接错误 我找到的唯一解决方法是将GetComputerName重命名为其他名称 还有其他人遇到这个错误吗 附言
system
命名空间中导出两个函数:IsRemoteSession()
和GetComputerName()
库B与库a有静态链接,并使用这两种功能。没有链接错误
库C与库a有一个静态链接,并使用这两个函数。存在链接错误:
LNK2019:调试和发布配置中未解析的外部符号“GetComputerName”
B和C的项目属性相同
MSVC 2008中没有链接错误
我找到的唯一解决方法是将GetComputerName重命名为其他名称
还有其他人遇到这个错误吗
附言。
\undef GetComputerName
没有帮助。这是因为windows.h
中有“#define”
它在A和B库中将我所有的
GetComputerName
重命名为GetComputerNameA
,而不是C库。也是Windows API调用的名称。与所有其他传递字符串参数的Windows API调用一样,它是一个预处理器符号,可扩展为GetComputerNameA
或GetComputerNameW
。您可能正在导出或导入与您认为的符号不同的符号。是的,我知道,但是:库B与库a有一个静态链接,并使用这两个函数。没有链接错误。而且,#undef GetComputerName
没有帮助。尽管如此,根据提供的信息,这个问题仍然无法回答。A是必需的,理想情况下,它包括确切的错误消息以及LIB文件的DUMPBIN输出。我猜windows.h
的包含顺序在B和A中都起到了作用,并重命名了所有GetComputerName
,但不在C中。链接器找不到它,因为它被调用了。类似于A中的GetComputerNameA
或GetComputerNameW
。对于测试,您可以查看导出或尝试在C中定义GetComputerNameA或W
。这不是解决方案。如果仅在库A中使用#undef GetComputerName
,则仍在尝试在库B和库C中导入错误的符号。必须确保在所有3个位置使用相同的符号。还要考虑使用/保留全局命名空间。