【问题标题】:Strange VC Linker Error LNK1107 that references link.exe引用 link.exe 的奇怪 VC 链接器错误 LNK1107
【发布时间】:2011-06-14 16:07:28
【问题描述】:

我收到了一个非常奇怪的链接器错误:

link.exe : fatal error LNK1107: invalid or corrupt file: cannot read at 0x270

但这很奇怪,因为通常错误消息会告诉您哪个对象无效或损坏。换句话说,此错误消息通常如下所示:

myDLL.dll : fatal error LNK1107: ....

但是,在这种情况下,无效对象是正在运行的应用程序本身 (link.exe)!

我已尝试将可执行文件替换为我知道有效的另一个副本。同样的错误。

我正在运行的命令是这样的:

../vendor/microsoft/msdev80_2005/VC/bin/link.exe /NOLOGO /SUBSYSTEM:CONSOLE /LIB
PATH:../vendor/microsoft/msdev80_2005/VC/atlmfc/lib /LIBPATH:../vendor/microsoft
/msdev80_2005/VC/lib /LIBPATH:../vendor/microsoft/msdev80_2005/VC/PlatformSDK/Li
b /LIBPATH:lib/win32/dbg /OUT:bin/win32/dbg/bugshow.exe Advapi32.lib ws2_32.lib
bugshow/obj/win32/dbg/main.o libA.lib libB.lib libC.lib libD.lib

main.o 正在使用以下编译器指令进行编译:

../vendor/microsoft/msdev80_2005/VC/bin/cl.exe /nologo /X /w /EHsc -I../vendor/m
icrosoft/msdev80_2005/VC/atlmfc/include -I../vendor/microsoft/msdev80_2005/VC/in
clude -I../vendor/microsoft/msdev80_2005/VC/PlatformSDK/Include /D_WIN32 /DBOOST
_USE_WINDOWS_H /DWIN32_LEAN_AND_MEAN /D_WIN32_WINNT=0x0501 /DBOOST_THREAD_USE_LI
B /DBOOST_ALL_NO_LIB /D_CRT_SECURE_NO_DEPRECATE /D_CRT_NONSTDC_NO_DEPRECATE /Z7
/MTd /c -I../vendor/boost.org/boost/1.45.0/include /Fobugshow/obj/win32/dbg/main.o 
bugshow/main.cpp

知道为什么 link.exe 会这样失败吗?

更新:

当我将 link.exe 所在的文件夹添加到我的 PATH 中,然后在没有路径前缀的情况下调用 link.exe 时,我收到以下错误:

LINK: fatal error LNK1181: cannot open input file 'link.exe'

为什么link.exe如此拼命地试图打开自己??!?!

【问题讨论】:

  • 为什么你在运行msdev80_2005/VC/bin/cl.exe时标记了这个visual-studio-2008
  • 您真的是从命令提示符手动运行这些,还是一个工具为您运行它们?

标签: c++ visual-studio-2005 linker


【解决方案1】:

我发现了问题!

MSVC 链接器在 Microsoft 的 MSDN 页面上使用了一个令人讨厌的小 ENVIRONMENT 变量 (described here)。它说:

LINK, if defined, prepends arguments in the command line.

我的系统将环境变量LINK 定义为STATIC,由我最近安装的一个应用程序定义。这导致 link.exe 将自身的命令行实例化解释如下:

STATIC link.exe /NOLOGO /SUBSYSTEM:CONSOLE ...

换句话说,*argv[1] 通常是第一个命令行参数,实际上是link.exe。它基本上将所有论点都降低了一个偏移量。这反过来又导致 link.exe 尝试将自己解释为它的第一个输入文件!

绝对,令人难以置信的令人沮丧和难以发现的问题......

【讨论】:

  • 你说的这个“最近的应用”是什么?
  • @silico:它是我工作的公司使用的内部工具套件的一部分。我将不得不告诉开发人员有关原因的冲突!尽管如此,由 Microsoft 的链接器引起的这个问题实际上阻止了某人使用名为“LINK”的 ENV var。而且几乎不可能调试!
  • @J T:其实我自己从来没有遇到过这个问题;这就是我问的原因。不过很高兴知道。
【解决方案2】:

我了解到,当您在链接器中包含头文件 (.h) 时,它会产生此错误。我遇到了这个问题并通过删除链接器>输入>添加依赖项中的.h来解决它

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-12-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多