2011-06-14 31 views
3

我正在出現一個很奇怪的鏈接錯誤:奇怪的VC連接錯誤LNK1107引用LINK.EXE

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/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將失敗這樣的:

../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是越來越使用下面的編譯器指令編譯?

UPDATE:

當我補充一點,在LINK.EXE我路上所在,然後調用LINK.EXE不帶路徑前綴的文件夾,我收到以下錯誤,而不是:

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

爲什麼link.exe試圖拼命打開自己?!?!

+0

爲什麼當您運行'msdev80_2005/VC/bin/cl.exe'時爲此'visual-studio-2008'添加標籤? – ildjarn 2011-06-14 16:19:07

+0

@ildjarn:fixed,ty – 2011-06-14 16:20:12

+0

你真的是從命令提示符手動運行這些,還是運行它們的工具? – 2011-06-14 19:57:52

回答

5

我想出了問題!

MSVC鏈接器在Microsoft的MSDN頁面上使用了一個令人討厭的小環境變量(described here)。它說:

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

我的系統必須由我安裝了最新的應用程序定義爲STATIC變量LINK環境。這導致LINK.EXE解釋自身的命令行實例如下:

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

換句話說,*argv[1]這通常是第一個命令行參數,竟是link.exe。它基本上將所有參數向下一個偏移量。這反過來導致link.exe嘗試和解釋自己作爲它的第一個輸入文件!

絕對的,令人難以置信的沮喪和難以檢測的問題......

+0

你說的這個「最近的應用」是什麼? – 2011-06-14 21:30:32

+0

@silico:在我工作的公司使用的內部工具套件的一部分。我必須告訴開發者關於原因的衝突!儘管如此,微軟鏈接器造成的這個問題實際上阻止了某人使用名爲「LINK」的ENV變量。幾乎不可能調試! – 2011-06-14 21:35:51

+0

@J T:我其實從來沒有遇到過這個問題;這就是爲什麼我問。不過,這很好。 – 2011-06-16 12:29:02

0

,我讀了它產生的時候,你已經包含了頭文件(.H)在你的鏈接器這個錯誤。我遇到了這個問題,並通過在鏈接器>輸入>附加依賴項中刪除.h來解決此問題。