我的环境: Win embedded (WES2009) RealTime驱动程序,用MSVS2008 / VS2010中的C语言编写的API。结果:2个独立的端口库,实现2个独立的解决方案:2个串口驱动程序的API。
一个简单的问题:我有这两个静态库,对应于两个不同的串口驱动程序。它们都在另一个VS2008项目中使用,在该项目中,我调用串口驱动程序的API。函数的签名在两个库中是相同的,但是它们的实现不同。
我的简单问题是: VS2008链接器的规则是什么?它将链接哪个库,因为它没有转换多个函数定义的链接器错误?
我已经扫描过类似的Q/A,但似乎没有一个能解决这个问题。他们通常与equal_named.lib打交道:
或者用这个问题来解决同样的问题,但是使用unix链接器:
Linking in several C object files that contain functions with equivalent signature
(谢谢你的启发:)
发布于 2014-08-13 08:00:22
我想,当我将一个.lib添加到我的项目中时,MSVS2008+会弹出一个窗口,询问我是否想为新的库创建一个链接规则。我想说在某些情况下这是唯一的可能。当您从两个库中包含标头时(或者如果两个库包含相同的命名头),链接器就没有机会区分您指的是哪一个。在我的例子中,链接者的行为变得不确定,没有链接规则。
但最好的做法是避免出现这种情况。我宁愿只使用一个库,或者在其中一个库中重构名称。
https://stackoverflow.com/questions/25176952
复制相似问题