gpt4 book ai didi

c++ - 如何使用 Microsoft 链接器工具链接静态 MFC 库

转载 作者:行者123 更新时间:2023-11-28 05:54:33 26 4
gpt4 key购买 nike

我正在尝试将我的程序与静态 MFC 库链接,如我的 makefile 中的以下目标代码所示(其余已省略):

!include <win32.mak>

all: window.exe

.cpp.obj:
$(cc) $(cdebug) $(cflags) $(cvars) $*.cpp

window.exe: window.obj
$(link) $(ldebug) $(guiflags) -out:window.exe window.obj mfc100d.lib mfcs100d.lib $(winlibs)

不幸的是,nmake 停止了链接过程并显示了以下错误:

  • nafxcwd.lib(afxmem.obj):错误 LNK2005:“void __cdecl 运算符delete(void *)"(??3@YAXPAX@Z) 已经定义在mfc100d.lib(mfc100d.dll)

  • 链接:警告 LNK4098:默认库“nafxcwd.lib”与使用冲突其他库;使用/NODEFAULTLIB:库

  • mfcs100d.lib(appmodul.obj):警告 LNK4217:本地定义的符号__setmbcp 在函数“int __stdcall AfxInitialize(int,unsigned long)”中导入 (?AfxInitialize@@YGHHK@Z)

  • window.exe: fatal error LNK1169:定义了一个或多个乘法找到符号

除了告诉 Microsoft 链接工具忽略 nafxcwd.lib 之外,我是否需要指定任何其他库名称或预处理器定义?

最佳答案

首先:不要使用 NODEFAULTLIB 选项。在这个阶段它不适合你。这个很重要。您必须改为调整其他选项。

MFC 链接到您的应用程序的方式必须与 CRT 链接的方式相同。 MFC 链接在您的项目属性 > 配置属性 > 常规 > 使用 MFC 中设置。静态链接和动态链接有两种选择。

CRT 链接(和编译)在您的项目属性 > 配置属性 > C/C++ > 代码生成 > 运行时库 中设置。应该有4个选项。名称中没有 DLL 的那些用于 static 链接。名称中带有 DLL 的那些用于动态 链接。名称中带有 Debug 的那些用于 Debug 配置。

只需匹配这两个选项,问题就会消失(或者如果您有不止一个问题,那么至少输出构建中的文本应该改变)。

nmake 项目中,如果您想链接到静态 MFC,则不要将 mfc100d.libmfcs100d.lib 库链接到您的项目,因为这些库用于动态链接。链接到 nafxcwd.lib 用于调试(您已经链接,否则不会有任何错误),或 nafxcw.lib 用于发布。此外,必须定义 _AFX 宏,并且必须有一个选项 /MT 用于发布,或 /MTd用于调试构建。

但是,如果您想动态链接 MFC,则定义 _AFXDLL 宏,并添加选项 /MD(对于 Release)或/MDd(对于 Debug 构建)。有关详细信息,请参阅 Microsoft 技术说明 TN033 中的“使用 NMAKE 构建”部分.

一个问题可能是你有一个已经以某种方式设置的第三方库,你必须在你的设置中遵循这种方式。另一个问题是,如果您有两个这样的库,但它们的设置方式不同。那么就不可能将它们联系在一起。如果这与您有关,我会扩展答案。

关于c++ - 如何使用 Microsoft 链接器工具链接静态 MFC 库,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34479365/

26 4 0
文章推荐: c++ - 找不到 vector 使用中的 fatal error
文章推荐: c++ - OpenCV - 如何计算照片中的物体?
文章推荐: html - 从数组中拉取数据到
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com