我的环境变量中缺少什么,因为我的链接器失败了LNK1181?

时间:2009-03-25 16:09:13

标签: c++ qt linker nmake

我有一个Qt项目,我在开发过程中显示了调试控制台,我即将发布产品给我删除了qmake控制台命令: CONFIG + = console

然而,当我这样做时,我收到以下错误:

link /LIBPATH:"c:\Qt\4.5.0\lib" /NOLOGO /INCREMENTAL:NO /LTCG /MANIFEST /MANIFESTFILE:"./_obj/win32\Lynx.intermediate.manifest" /SUBSYSTEM:WINDOWS "/MANIFESTDEPENDENCY:type='win32' name='Microsoft.Windows.Common-Controls' version='6.0.0.0' publicKeyToken='6595b64144ccf1df' language='*' processorArchitecture='*'" /VERSION:4.00 /OUT:bin\win32\Lynx.exe @C:\DOCUME~1\hannentp\LOCALS~1\Temp\nm1C9.tmp 
link_.exe /LIBPATH:c:\Qt\4.5.0\lib /NOLOGO /INCREMENTAL:NO /LTCG /MANIFEST /MANIFESTFILE:./_obj/win32\Lynx.intermediate.manifest /SUBSYSTEM:WINDOWS /MANIFESTDEPENDENCY:type='win32' name='Microsoft.Windows.Common-Controls' version='6.0.0.0' publicKeyToken='6595b64144ccf1df' language='*' processorArchitecture='*' /VERSION:4.00 /OUT:bin\win32\Lynx.exe @C:\DOCUME~1\hannentp\LOCALS~1\Temp\nm1C9.tmp~
LINK_ : fatal error LNK1181: cannot open input file 'name='Microsoft.Windows.Common-Controls''
NMAKE : fatal error U1077: '"C:\Program Files\Microsoft Visual Studio 9.0\VC\Bin\link.EXE"' : return code '0x49d'
Stop.

我认为缺少一个lib路径,但是我确实已经设置了很多环境变量并且已经工作了。有没有人看过这个并知道Microsoft.Windows.Common-Controls的位置?

我也是从buildbot运行这个,所以VS2008的IDE并不是我想要帮助的地方。

5 个答案:

答案 0 :(得分:3)

似乎命令行被低估了:

"/MANIFESTDEPENDENCY:type='win32' name='Microsoft.Windows.Common-Controls' version='6.0.0.0' publicKeyToken='6595b64144ccf1df' language='*' processorArchitecture='*'"

在第二行,引号消失,链接器将每个单词视为要链接的对象。你应该只是添加引号(如果你是谁添加了这个参数),即。以"\"开头和结尾(3个字符代替一个引号)。似乎其他消息来源也提出了这一点,所以试着尝试一下。

答案 1 :(得分:1)

不确定,如果你在这个问题上取得了进一步的进展。

我有类似的错误,但使用的是msvc2005(不是IDE)。 我没有link_.exe的任何实例,所以我无法验证您的修复。

当我启用控制台(CONFIG + = console)时,它无法管理链接 由于其他问题 - 找不到切入点:

Fatal Error LNK1561: Entry Point Must Be Defined

我随机找到http://support.microsoft.com/kb/140597 其中讨论了尾随反斜杠字符,认为它是针对msvc 4并且稍后修复的。我检查了我的代码,并且在指定时我跟踪了forwards .pro文件中的LIBPATH。我修复了那些,并用(CONFIG + = console)编译了。现在我删除了该选项,并且遇到了不同但有点逻辑的问题:

MSVCRT.lib(crtexew.obj) : error LNK2001: unresolved external symbol _WinMain@16
app.exe : fatal error LNK1120: 1 unresolved externals

看看你的nmake输出,我想知道是否混合正向和反斜杠字符 在

/MANIFESTFILE:"./_obj/win32\Lynx.intermediate.manifest"

造成这个问题。虽然它可能会有所不同。

注意,我的.pro文件中也有CONFIG -= embed_manifest_exe。 我的nmake看起来像这样:

link /LIBPATH:"c:\Apps\boost\boost_1_38\lib" /NOLOGO /INCREMENTAL:NO /LTCG /SUBSYSTEM:WINDOWS "/MANIFESTDEPENDENCY:type='win32' name='Microsoft.Windows.Common-Controls' version='6.0.0.0' publicKeyToken='6595b64144ccf1df' language='*' processorArchitecture='*'" /OUT:valueForSba.exe @C:\DOCUME~1\LOCALS~1\Temp\nm398.tmp
Creating library app.lib and object app.exp
MSVCRT.lib(crtexew.obj) : error LNK2001: unresolved external symbol _WinMain@16
app.exe : fatal error LNK1120: 1 unresolved externals

我也没有在这个项目中使用任何qt类,只使用qmake来获取Makefile。 (qmake来自4.5.1商业版)

答案 2 :(得分:0)

我的印象是Qt的免费版本仅使用Mingw而非Visual Studio构建。如果您使用Qt的免费版本可能是问题。如果您不熟悉Mingw,那么它的GCC编译器工具链会在Windows下使用.lib文件调整用于各种Windows特定库。

答案 3 :(得分:0)

根据我在微软网站上发现的内容,Comctl32.dll是您需要找到的库,并将其路径添加到您的构建环境中。看看是否有效。

答案 4 :(得分:0)

我一直在遭遇同样的问题。原来,这台电脑有两个不同的MSVC版本(7.1和8.0)。尽管SDK是针对8.0构建的,但它在QtCreator Tools-> Options-> Qt4-> Qt4版本中被选为7.1。所以我把它切换到8.0版,现在工作正常。