2012-10-03 224 views
1

我已经在Visual Studio中创建了一个静态库(它没有使用mfc),并且想要在静态链接的mfc项目(实际上是com-dll)中链接它。Visual Studio:静态链接到静态库

链接mfc-lib我收到一堆消息symbol is already defined。这是因为我将标准C++库链接了两次(一次在静态库中,另一次在mfc项目中)。

我该如何解决? 与/FORCE:MULTIPLE有一个解决方法,但我认为这是一个不好的决定。

+0

修复它的最好方法是静态链接所有使用的项目,就像 – stijn

+1

Project + Properties,C/C++,代码生成,运行时库设置一样简单。 –

+0

似乎问题的确在于连接类型的差异。谢谢。 – Georg

回答

0

将静态库链接到DLL或EXE项目时,需要注意所有项目都已编译为使用相同的运行时库。因此,请将所有项目设置为“使用MFC”,并将其设置为相同的“运行时库”。如果你不这样做,那么一个项目可能已经被编译为从标准CRT获取fopen函数,而另一个项目可能已经被编译为从MFC获取fopen函数。混合这些对于连接器来说是一个问题,因为他不知道使用哪个运行时(以及在该示例中:哪个fopen)。

将DLL或EXE项目链接到另一个DLL项目时,这不是问题。你可以拥有一个没有MFC使用的DLL,并将你的MFC EXE与该DLL链接起来。

如果你有一个在不同项目中经常使用的util库,那么你可以考虑设置不同的构建设置,以便可以在DEBUG和RELEASE以及使用和不使用MFC的情况下构建库。然后在您的EXE项目中,您可以选择与您的项目设置相匹配的库二进制文件。