+ -
当前位置:首页 → 问答吧 → vs2005 编译连接问题。 MDD 和 MTD 链接的bug。

vs2005 编译连接问题。 MDD 和 MTD 链接的bug。

时间:2011-12-21

来源:互联网

A工程生成一个exe,B工程是一个lib库。A工程依赖B工程。

A工程是Use of MFC: Use MfC in a Shared Dll ,Runtime Library : MDD
B工程是Use of MFC: Use MfC in a Static Library,Runtime Library : MTD

编译完成后,链接不过。报一下错误。
error LNK2005 *** already defined ****

把B工程改成和A工程一样的配置,可以完成编译。大家不要再提这个解决办法。
有没有保持现在A,B的工程设置,使其能链接过?
请大家指点!

作者: changyang208   发布时间: 2011-12-21

设置A工程链接时 忽略 mfc crt相关的lib
其实跟修改为MTD区别不大。

还是修改为MTD保险。

作者: akirya   发布时间: 2011-12-21

全改为同样的链接方式

作者: xunxun1982   发布时间: 2011-12-21

回复1楼:
  我在A工程的Linker->Input->Ignore specific Library 中加入 libcpmtd.lib libcmtd.lib 来忽略 MTD 对应的MFC 相关lib库。
  从网上查的资料是 MTD 对应的MFC 的lib库是 libcpmtd.lib libcmtd.lib。
 可是还是编译不过。我是哪里填写的有问题吗?



作者: changyang208   发布时间: 2011-12-21

这个帖子要沉了吗?

作者: changyang208   发布时间: 2011-12-21

《程序员的自我修养——链接、装载与库》

作者: zhao4zhong1   发布时间: 2011-12-21

引用 3 楼 changyang208 的回复:

回复1楼:
我在A工程的Linker->Input->Ignore specific Library 中加入 libcpmtd.lib libcmtd.lib 来忽略 MTD 对应的MFC 相关lib库。
从网上查的资料是 MTD 对应的MFC 的lib库是 libcpmtd.lib libcmtd.lib。
可是还是编译不过。我是哪里填写的有问题吗?

……

你的忽略A工程动态链接mfc的库。

B工程已经把mfc的库链接到静态库中了,你只能忽略A动态链接的库,让A工程使用B中已经链接进来的。

作者: akirya   发布时间: 2011-12-21

引用 6 楼 akirya 的回复:
引用 3 楼 changyang208 的回复:

回复1楼:
我在A工程的Linker->Input->Ignore specific Library 中加入 libcpmtd.lib libcmtd.lib 来忽略 MTD 对应的MFC 相关lib库。
从网上查的资料是 MTD 对应的MFC 的lib库是 libcpmtd.lib libcmtd.lib。
可是还是编译不过。我是哪里……


能不能忽略 B工程中的 静态链接库,让B用A的工程中动态的链接库?
十分感谢你的答复。谢谢!!

作者: changyang208   发布时间: 2011-12-21

引用 7 楼 changyang208 的回复:

引用 6 楼 akirya 的回复:
引用 3 楼 changyang208 的回复:

回复1楼:
我在A工程的Linker->Input->Ignore specific Library 中加入 libcpmtd.lib libcmtd.lib 来忽略 MTD 对应的MFC 相关lib库。
从网上查的资料是 MTD 对应的MFC 的lib库是 libcpmtd.lib libcmt……

不能,编译的时候已经和B是一个整体了,要么全忽略,要么全用。

还没发现有啥编译选项能忽略 静态库中的指定符号。

作者: akirya   发布时间: 2011-12-21

问题是这样的,我做了三个工程 A B C D
A 是exe B lib库 C 是exe D 是lib库

A工程是Use of MFC: Use MfC in a Shared Dll ,Runtime Library : MDD
B工程是Use of MFC: Use MfC in a Static Library,Runtime Library : MTD
C工程是Use of MFC: Use MfC in a Static Library,Runtime Library : MTD
D工程是Use of MFC: Use Standard Windows Library, Runtime Library : MDD

A 工程依赖 D B lib库。 C工程依赖 B lib库。
刚才的办法让A使用 B 静态库链接。导致 D lib库链接不过。
有没有更好的办法结局?
我看vs编辑器里面有一个 RunTime Library 有一个选项是 inherit from parent or project defaults. 这个选项怎么使用?
十分感谢你的答复!谢谢!

作者: changyang208   发布时间: 2011-12-21

改编译选项。
静态库的编译选项和exe的一致。

作者: akirya   发布时间: 2011-12-21