C++ visualc&x2B+;。LNK2011:未链接到中的预编译对象。但我联系上了
我第一次尝试使用预编译头。使用命令行。这是:C++ visualc&x2B+;。LNK2011:未链接到中的预编译对象。但我联系上了,c++,visual-c++,command-line,linker,precompiled-headers,C++,Visual C++,Command Line,Linker,Precompiled Headers,我第一次尝试使用预编译头。使用命令行。这是: cl /Yu"pch.h" src/main.cpp src/shader.cpp src/camera.cpp /std:c++17 /MT -EHsc glfw3.lib glew32.lib GlU32.lib OpenGL32.lib -I include /link "pch.obj" /LIBPATH:"C:\Users\yuryi\Desktop\C++\CMDOGL\lib"
cl /Yu"pch.h" src/main.cpp src/shader.cpp src/camera.cpp /std:c++17 /MT -EHsc glfw3.lib glew32.lib GlU32.lib OpenGL32.lib -I include /link "pch.obj" /LIBPATH:"C:\Users\yuryi\Desktop\C++\CMDOGL\lib" "kernel32.lib" "user32.lib" "gdi32.lib" "winspool.lib" "comdlg32.lib" "advapi32.lib" "shell32.lib" "ole32.lib" "oleaut32.lib" "uuid.lib" "odbc32.lib" "odbccp32.lib" /OUT:"C:\Users\user\Desktop\C++\CMDOGL\a.exe" /MACHINE:X64 /nologo
但它会打印:pch.obj:LNK2011:未链接到中的预编译对象。图像可能无法运行
。我不知道怎么把它联系起来。我想我是用/link“pch.obj”完成的。注意:/Yc“pch.h”成功
文件结构:
- main.cpp
- pch.cpp
- pch.h
- shader.cpp
- shader.h
- camera.cpp
- camera.h
pch.cpp
只是#包括“pch.h”
。pch.h包括项目所需的一切。所有其他文件仅包括pch.h
我尝试过的事情:
->要链接对象文件,需要使用link/out objectfile.obj。这是微软文档中提到的正确方法。 ->甚至认为如果你得到了恼人的错误,试试这个链接 ->此页面包含所有CMD链接内容 您还可以使用/wholerachive,该命令获取指向对象文件库的路径 ->此页面包含/wholerchive内容 还有另一种方法链接对象文件/Fo命令。此命令再次获取对象文件的路径值 ->/Fo东西 ->我添加这个链接是因为我认为可能有一些错误的命令隐藏在命令行中。
上面的一个包含Visual Studio和MSVC++编译器中的预编译文件我通过以下命令序列解决了这个问题:
cl /c /Yc"pch.h" src/pch.cpp /std:c++17 /MT -EHsc -I include /link /nologo
cl /c /Yu"stdafx.h" src/main.cpp /std:c++17 /MT -EHsc -I include /link /nologo
cl /c /Yu"stdafx.h" src/camera.cpp /std:c++17 /MT -EHsc -I include /link /nologo
cl /c /Yu"stdafx.h" src/shader.cpp /std:c++17 /MT -EHsc -I include /link /nologo
对于使用预编译头快速编译源文件:
cl /Yu"pch.h" src/main.cpp src/shader.cpp src/camera.cpp /std:c++17 /MT -EHsc glfw3.lib glew32.lib GlU32.lib OpenGL32.lib -I include /link /out:a.exe stdafx.obj /LIBPATH:"lib" "kernel32.lib" "user32.lib" "gdi32.lib" "shell32.lib" /MACHINE:X64 /nologo
我不太清楚它是如何工作的,但它解决了问题。看起来像是
pch.cpp
不在列表中:src/main.cpp src/shader.cpp src/camera.cpp
很好。它修复了这个确切的错误,但现在我遇到了不一致的错误src/camera.cpp(1):致命错误C1854:无法覆盖在对象文件中创建预编译头时形成的信息:“C:\Users\user\Desktop\C++\CMDOGL\camera.obj”
(有时使用shader.cpp)。我想这个问题已经解决了。我的建议是进入项目设置并完全禁用预编译头。然后从所有源文件中删除#include“pch.h”
。当您没有10000行代码和/或许多大型外部第三方库依赖项时,这是最好的。预编译的标题并不能真正帮助学术作业中使用的典型项目。如果在这样小的项目上有任何东西导致生成时间增加。@natovan您必须首先使用编译pch.cpp
,然后使用/Yu
编译其他cpp,然后全部。@dxiv您的注释比任何其他注释都更有帮助。我添加了bat文件来自动化几个cmd,现在我有了非常快速的编译!您的回答让我朝着正确的方向前进,最终我实现了预编译头,但我认为这有点误导-option/out用于命名可执行文件,/WHOLEARCHIVE用于.lib文件,与此无关