LNK2005:查找使用/MT构建的模块 我正在尝试构建C++项目(MMASPER)。这取决于其他一些项目

LNK2005:查找使用/MT构建的模块 我正在尝试构建C++项目(MMASPER)。这取决于其他一些项目,c++,nmake,mapserver,lnk2005,mt,C++,Nmake,Mapserver,Lnk2005,Mt,当我运行nmake时,它会显示如下许多错误: ... LIBCMTD.lib(getenv.obj) : error LNK2005: _getenv already defined in MSVCRT.lib(MSVCR90.dll) LIBCMTD.lib(tolower.obj) : error LNK2005: _tolower already defined in MSVCRT.lib(MSVCR90.dll) LIBCMTD.lib(fflush.obj) : error LNK20

当我运行
nmake
时,它会显示如下许多错误:

...
LIBCMTD.lib(getenv.obj) : error LNK2005: _getenv already defined in MSVCRT.lib(MSVCR90.dll)
LIBCMTD.lib(tolower.obj) : error LNK2005: _tolower already defined in MSVCRT.lib(MSVCR90.dll)
LIBCMTD.lib(fflush.obj) : error LNK2005: _fflush already defined in MSVCRT.lib(MSVCR90.dll)
MSVCRT.lib(MSVCR90.dll) : error LNK2005: __strnicmp already defined in LIBCMTD.lib(strnicmp.obj)
...
我知道这是由不同项目的
/MD
/MT
选项引起的

我检查了所有项目的构建文件,只找到了一个带有
/MT
的文件。我将其更改为
/MD
,并重新构建了它,但仍然存在错误

如何查找导致此错误的库

谢谢大家

p.S.项目清单:

curl-7.24.0
expat-2.0.1
freetype-2.4.8
gdal-1.9.0
gdwin32
jpeg-6b
lpng158
mapserver <-- main
postgresql-8.4.9
proj-4.7.0
regex-0.12
curl-7.24.0
外籍人士-2.0.1
freetype-2.4.8
gdal-1.9.0
gdwin32
jpeg-6b
lpng158
mapserver看看这个KB

根据您尝试执行的构建使用“忽略库”行。如果您正在使用的库需要该库,您将得到一个未找到该库的符号,您可以修复它


此外,您还可以使用
dumpbin
查找库将尝试链接到的内容。

解决方案非常简单

我在主程序使用的每个库上运行
dumpbin
。其中一个是用

/DEFAULTLIB:"LIBCMTD"
这意味着
/MT
选项

另外,有趣的是,构建文件不包含
/MT
/MTd
选项。相反,它包括

<win32.mak>
生成文件包含

CFLAGS= $(cflags) $(cdebug) $(cvars) -I.
我把它换成了

CFLAGS= $(cflags) $(cdebug) $(noansi) -D_MD -MDd -I.
一切都开始起作用了

CFLAGS= $(cflags) $(cdebug) $(noansi) -D_MD -MDd -I.