c – Visual Studio 2010库链接顺序
如何在Visual Studio 2010中指定库文件的链接顺序?
我有一个项目链接libexpat和另一个库.这个库(不在我的控制之下)似乎也包括libexpat.问题是’我们’使用不同版本的库(XML_UNICODE vs not).在Visual Studio 2008中,似乎没有问题(可能是巧合),但在Visual Studio 2010中,libexpat的错误实例已链接.我想如果我可以指定这两个库应该链接的顺序,那么我可以绕过这个问题. 解决方法
几年前,我发现了一个hack,允许你强制Visual C链接具有特定优先级的库.这不是很优雅,但它很实用.
似乎Visual C的链接器基于符号依赖性动态生成链接顺序.通过预先添加符号引用,可以强制链接器包含链接器输入中指定的第一个库.请注意,我只用Visual C 6和8(2005)进行了测试. 例如,假设您有两个带有XML_ParserCreate符号的库: > libexpat.lib – XML_ParserCreate 首先,按照您的预期排序库依赖项,libexpat.lib然后是someother.lib.通过命令行,这些将是link.exe的选项.在Visual Studio 2005中,它们将是项目的配置属性 – >下的选项.链接器 – >输入 – >额外的依赖关系.我想象Visual C 2010有一个类似的菜单. 接下来,使用/INCLUDE链接器选项添加一个命令行选项,该选项可以预先定义已知的重复符号.在Visual Studio 2005中,可以在项目的配置属性 – >下添加它.链接器 – >命令行 – >其他选项: /out some.exe ... libexpat.lib someother.lib /include:XML_ParserCreate 此符号的定义将使链接器立即更喜欢终止(实现)它的第一个库.通常,Visual C将生成带有重复符号的错误;如果还没有,请确保您还指定了/FORCE:MULTIPLE链接器选项. 我对此的特殊需求是使用DUMA内存调试库.它定义了各种内存函数,这些函数也在libcmtd.lib中定义.以下会错误地链接libcmtd的_malloc版本,尽管库顺序似乎相反: /out some.exe ... duma.lib libcmtd.lib /FORCE:MULTIPLE 这是通过手动添加符号解决的,并且可靠地工作多年: /out some.exe ... duma.lib libcmtd.lib /INCLUDE:_malloc /FORCE:MULTIPLE (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
- c – printf(“%s”),printf(“%ls”),wprintf(“%s”)和
- c – boost :: thread和std :: thread之间的区别
- VBA粘贴Excel活动工作表中的每一嵌入式图表到一个新的幻灯片
- cocos2d-js v3.0 新功能-----事件分发机制
- PostgreSQL扫盲教程
- 谈一谈自己对依赖、关联、聚合和组合之间区别的理解
- (译)如何使用cocos2d制作基于tile地图的游戏教程:第一部
- ruby-on-rails – 如何使用延迟加载程序捕获Capybara Featu
- iOS – NSJSONSerialization:无法将数据转换为字符串周围的
- ios – 当iPhone连接到任何配对的汽车时检测到