视觉C++。 LNK2011:未链接预编译对象。但我链接了
Visual C++. LNK2011: precompiled object not linked in. But I linked
我第一次尝试使用预编译头文件。使用命令行。在这里:
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: precompiled object not linked in. image may not run
。我不知道如何 link 它。我想我是用 /link "pch.obj" 做的。注意:/Yc"pch.h" 成功
文件结构:
- main.cpp
- pch.cpp
- pch.h
- shader.cpp
- shader.h
- camera.cpp
- camera.h
pch.cpp
就是 #include "pch.h"
。 pch.h 包括项目中所需的一切。所有其他文件仅包含 pch.h
.
我尝试过的事情:
- 谷歌搜索 2 小时(MS 文档等)
- 以不同方式调整命令行
-> 对于 Link 目标文件,您需要使用 link /out objectfile.obj。它是 Microsoft Docs 中提到的正确方法。
-> 甚至认为如果你遇到那个烦人的错误试试这个 Link
https://docs.microsoft.com/en-us/cpp/build/reference/linking?view=vs-2019
->此页面包含所有 CMD Linking 内容
https://docs.microsoft.com/en-us/cpp/build/reference/linker-options?view=vs-2019
您也可以使用 /WHOLEARCHIVE,此命令采用目标文件库的路径。
->此页面包含 /WHOLEARCHIVE 内容
https://docs.microsoft.com/en-us/cpp/build/reference/wholearchive-include-all-library-object-files?view=vs-2019
Link 对象文件 /Fo 命令还有另一种方法。此命令再次采用目标文件的路径值
-> /Fo 东西
https://docs.microsoft.com/en-us/cpp/build/reference/fo-object-file-name?view=vs-2019
-> 我添加这个 Link 是因为我认为那行命令中可能隐藏着某种错误的命令。
https://docs.microsoft.com/en-us/cpp/build/creating-precompiled-header-files?view=vs-2019
以上是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
我不太明白它是如何工作的,但它解决了问题。
我第一次尝试使用预编译头文件。使用命令行。在这里:
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: precompiled object not linked in. image may not run
。我不知道如何 link 它。我想我是用 /link "pch.obj" 做的。注意:/Yc"pch.h" 成功
文件结构:
- main.cpp
- pch.cpp
- pch.h
- shader.cpp
- shader.h
- camera.cpp
- camera.h
pch.cpp
就是 #include "pch.h"
。 pch.h 包括项目中所需的一切。所有其他文件仅包含 pch.h
.
我尝试过的事情:
- 谷歌搜索 2 小时(MS 文档等)
- 以不同方式调整命令行
-> 对于 Link 目标文件,您需要使用 link /out objectfile.obj。它是 Microsoft Docs 中提到的正确方法。 -> 甚至认为如果你遇到那个烦人的错误试试这个 Link https://docs.microsoft.com/en-us/cpp/build/reference/linking?view=vs-2019
->此页面包含所有 CMD Linking 内容 https://docs.microsoft.com/en-us/cpp/build/reference/linker-options?view=vs-2019
您也可以使用 /WHOLEARCHIVE,此命令采用目标文件库的路径。
->此页面包含 /WHOLEARCHIVE 内容 https://docs.microsoft.com/en-us/cpp/build/reference/wholearchive-include-all-library-object-files?view=vs-2019
Link 对象文件 /Fo 命令还有另一种方法。此命令再次采用目标文件的路径值
-> /Fo 东西 https://docs.microsoft.com/en-us/cpp/build/reference/fo-object-file-name?view=vs-2019
-> 我添加这个 Link 是因为我认为那行命令中可能隐藏着某种错误的命令。 https://docs.microsoft.com/en-us/cpp/build/creating-precompiled-header-files?view=vs-2019 以上是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
我不太明白它是如何工作的,但它解决了问题。