鏈接器工具錯誤 LNK2011


問題描述:

使用visual studio 2015編譯apr-iconv失敗,提示“鏈接器工具錯誤 LNK2011:未鏈接預編譯對象;映像可能不能運行”錯誤。

原因分析:

MSDN關於該錯誤描述如下(https://msdn.microsoft.com/zh-cn/library/3ay26wa2.aspx):

如果使用預編譯頭,LINK 要求必須鏈接所有與預編譯頭一起創建的對象文件。 如果您有用來生成用於其他源文件的預編譯頭的源文件,現在必須包括與預編譯頭一起創建的對象文件。例如,如果編譯一個名為 STUB.cpp 的文件,以創建用於其他源文件的預編譯頭,則必須與 STUB.obj 鏈接,否則就會得到此錯誤。 在下列命令行中,第一行用於創建預編譯頭 COMMON.pch,它與第二行和第三行中的 PROG1.cpp 和 PROG2.cpp 一起使用。 文件 STUB.cpp 只包含 #include行(與 PROG1.cpp 和 PROG2.cpp 中的 #include 行相同),並只用於生成預編譯頭。 在最后一行中,必須鏈接 STUB.obj 以避免 LNK2011。 

cl /c /Yccommon.h stub.cpp  
cl /c /Yucommon.h prog1.cpp  
cl /c /Yucommon.h prog2.cpp  
link /out:prog.exe stub.obj prog1.obj prog2.obj  

 而在libapriconv_ccs_modules和libapriconv_ces_modules庫中,均使用了對應的預編譯頭文件,但在link選項中沒有添加對應的obj編譯對象。

解決方案:

修改apr-iconv\build\modules.mk.win文件:

.c{$(OUTPUT_DIR)}.so:
	cl $(ALL_CFLAGS) /Fo$*.obj /Yuiconv.h /c $<
	link $(ALL_LDFLAGS) $(MODRES).obj $*.obj $(API_LIBS) /out:$@ \
		/base:@"..\build\BaseAddr.ref",$(@F)
	if exist $@.manifest \
		mt -nologo -manifest $@.manifest -outputresource:$@;2 \
		& del "$@.manifest"
	del "$*.exp" & del "$*.lib"

  在link命令中添加$(MODRES).obj項。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM