2012-03-24 88 views
0

我尝试在Visual Studio 2010 Express中的动态库tmxParser.lib中链接一个静态库。我将静态库设置为动态库的依赖关系。当VS构建静态库时建立良好并创建tmxParser.lib。当VS构建动态库时,我收到链接器错误。我试图匹配属性页下的运行时库 - >配置属性 - > C/C++ - >代码生成 它没有帮助。任何人有任何想法?是否有可能将静态库链接到Visual Studio中的动态库?

2>LIBCMTD.lib(fopen.obj) : error LNK2005: _fopen already defined in s3e_d.lib(iwcrt_stdio.obj) 
2>LIBCMTD.lib(open.obj) : error LNK2005: __open already defined in s3e_d.lib(iwcrt_win32.obj) 
2>LIBCMTD.lib(open.obj) : error LNK2005: __sopen already defined in s3e_d.lib(iwcrt_win32.obj) 
2>LIBCMTD.lib(chsize.obj) : error LNK2005: __chsize already defined in s3e_d.lib(iwcrt_win32.obj) 
2>LIBCMTD.lib(read.obj) : error LNK2005: __read already defined in s3e_d.lib(iwcrt_win32.obj) 
2>LIBCMTD.lib(close.obj) : error LNK2005: __close already defined in s3e_d.lib(iwcrt_win32.obj) 
2>LIBCMTD.lib(lseek.obj) : error LNK2005: __lseek already defined in s3e_d.lib(iwcrt_win32.obj) 
2>LIBCMTD.lib(setmode.obj) : error LNK2005: __setmode already defined in s3e_d.lib(iwcrt_win32.obj) 
+0

你最好使用他们专用的论坛:http://www.madewithmarmalade.com/devnet/forum/general – 2012-03-24 17:36:03

+0

感谢您的回应。我已经试过他们的论坛,但没有回应。 – user1290166 2012-03-25 21:58:06

+0

是的,这是典型的。 “随处跑!”的承诺!与支持和你的运气成反比,与执行模式修补一下。 – 2012-03-25 22:01:35

回答

0

当你说你有它设置为一个依赖,你的意思是你有它设置为项目依赖或者是在“附加依赖”,在

Project Properties -> Librarian->General -> Additional Dependencies

0

一般情况下,是的。

您似乎遇到的问题是该库(是否为marmalade library?)实现了C++运行时库中的一些方法。可能这个lib应该在不链接标准运行时库的情况下使用。

可能的解决方案:

  • 没有链接C++运行时在你的DLL。
    • 提取所有的obj:如果你写的只是一个瘦包装
    • 询问家伙使他们怎么想这个应该工作
    • 使用LIB.EXE或DUMPBIN.EXE到lib这应该是可能的的lib
    • 的文件从.obj文件中删除冲突的符号
    • 重新创建的lib

后者是obvio我们是一个丑陋的黑客,应该保留的情况下,既没有源代码也没有原始开发人员可用了。

+0

感谢您的帮助。我认为tmxParser是一个静态库的原因是因为当我可以从dll动态库的输出类型到静态libray(.lib)时,所有链接器错误都消失了。但是应用程序在运行时会出错。我最终在主应用程序中包含了tmxParser的源代码。虽然我必须更改tmxParser代码,所以它不需要标准运行时库。 – user1290166 2012-03-25 22:08:18

相关问题