OpenGL GLFW 构建错误或链接错误
OpenGL GLFW build errors OR linking errors
有人可以帮助我让 GLFW 在 Visual Studio 2012 年工作吗?我无法通过初始编译。我不断收到 GLFW 函数未解决的外部问题。问题是,我不知道我做错了什么。我可能是:
- 使用 CMake 不正确地制作源文件。
- 库构建不当。
- 不正确地链接到 GLFW 库。
我不确定是哪一个,所以我只列出我所做的:
1. Downloaded glfw-3.1.1 from glfw.org.
2. Used CMake GUI to make the source files.
a. Set source code to C:/GLFW/glfw-3.1.1
b. Set "Where to build the binaries" to C:/GLFW/glfw-3.1.1/GLFW_Built (I created that directory)
c. Clicked "Configure"
d. Selected "Visual Studio 11 2012" as the generator (I also tried "Visual Studio 11 2012 Win64," but it gave me the same results. The ARM one wouldn't build at all)
e. Left "Use default native compilers" selected.
f. Clicked "Finish."
g. Set "BUILD_SHARED_LIBS" to true (checked).
h. Clicked "Generate."
3. Built the library.
a. Went to C:\GLFW\glfw-3.1.1\GLFW_Built and opened GLFW.sln in Visual Studio 2012.
b. Clicked BUILD->Build ALL_BUILD (worked fine, no errors)
4. Created a new blank project in Visual Studio 2012.
5. Went into the properties pages and set:
a. Configuration Properties/VC++ Directories/Include Directories: added "C:\GLFW\glfw-3.1.1\include"
b. Configuration Properties/VC++ Directories/Library Directories: added "C:\GLFW\glfw-3.1.1\GLFW_Built\CMakeFiles\Export\lib" (it was the only lib folder I saw) and "C:\GLFW\glfw-3.1.1\GLFW_Built\src\Debug" (contains glfw3.dll and glfw3dll.lib)
c. Configuration Properties/C/C++/Additional Include Directories: added "C:\GLFW\glfw-3.1.1\include"
d. Configuration Properties/Linker/General: added "C:\GLFW\glfw-3.1.1\GLFW_Built\src\Debug
e. Configuration Properties/Linker/Input: added "glfw3dll.lib" and "opengl32.lib"
对于我的代码,我在main.cpp中只有一个非常简单的测试程序:
#include <GLFW/glfw3.h>
#include <thread>
int main()
{
glfwInit();
std::this_thread::sleep_for(std::chrono::seconds(1));
glfwTerminate();
}
但我总是在输出中得到这个:
1>main.obj : error LNK2019: unresolved external symbol _glfwInit referenced in function _main
1>main.obj : error LNK2019: unresolved external symbol _glfwTerminate referenced in function _main
1>C:\Users\Adam\Desktop\Revenant\Revenant\Debug\Revenant.exe : fatal error LNK1120: 2 unresolved externals
将 GLFW 提取到 C:\glfw-src
(这样存档中的 CMakeLists.txt
位于 C:\glfw-src\CMakeLists.txt
)
cd C:\glfw-src
mkdir build
cd build
cmake-gui ../
- 按配置,select 工具链
- 将
CMAKE_INSTALL_PREFIX
设置为C:/glfw
- 创建
c:\glfw
目录
- 再次按配置
- 按生成
- 在 Visual Studio
中打开 build\GLFW.sln
- 构建 ALL_BUILD 项目的发布版本
- 构建 INSTALL 项目的发布版本
C:\glfw
现在应该包含 include
和 lib
目录。
假设一个全新的 "Empty Project" 解决方案:
- 编译器:将
c:\glfw\include
添加到 /I
(配置属性 -> C/C++ -> 常规 -> 附加包含目录)
- 链接器:将
c:\glfw\lib
添加到 /LIBPATH
(配置属性 -> 链接器 -> 常规 -> 附加库目录)并将 glfw3.lib
& opengl32.lib
添加到 /DYNAMICBASE
(配置属性 -> 链接器 -> 输入 -> 附加依赖项)
有人可以帮助我让 GLFW 在 Visual Studio 2012 年工作吗?我无法通过初始编译。我不断收到 GLFW 函数未解决的外部问题。问题是,我不知道我做错了什么。我可能是:
- 使用 CMake 不正确地制作源文件。
- 库构建不当。
- 不正确地链接到 GLFW 库。
我不确定是哪一个,所以我只列出我所做的:
1. Downloaded glfw-3.1.1 from glfw.org.
2. Used CMake GUI to make the source files.
a. Set source code to C:/GLFW/glfw-3.1.1
b. Set "Where to build the binaries" to C:/GLFW/glfw-3.1.1/GLFW_Built (I created that directory)
c. Clicked "Configure"
d. Selected "Visual Studio 11 2012" as the generator (I also tried "Visual Studio 11 2012 Win64," but it gave me the same results. The ARM one wouldn't build at all)
e. Left "Use default native compilers" selected.
f. Clicked "Finish."
g. Set "BUILD_SHARED_LIBS" to true (checked).
h. Clicked "Generate."
3. Built the library.
a. Went to C:\GLFW\glfw-3.1.1\GLFW_Built and opened GLFW.sln in Visual Studio 2012.
b. Clicked BUILD->Build ALL_BUILD (worked fine, no errors)
4. Created a new blank project in Visual Studio 2012.
5. Went into the properties pages and set:
a. Configuration Properties/VC++ Directories/Include Directories: added "C:\GLFW\glfw-3.1.1\include"
b. Configuration Properties/VC++ Directories/Library Directories: added "C:\GLFW\glfw-3.1.1\GLFW_Built\CMakeFiles\Export\lib" (it was the only lib folder I saw) and "C:\GLFW\glfw-3.1.1\GLFW_Built\src\Debug" (contains glfw3.dll and glfw3dll.lib)
c. Configuration Properties/C/C++/Additional Include Directories: added "C:\GLFW\glfw-3.1.1\include"
d. Configuration Properties/Linker/General: added "C:\GLFW\glfw-3.1.1\GLFW_Built\src\Debug
e. Configuration Properties/Linker/Input: added "glfw3dll.lib" and "opengl32.lib"
对于我的代码,我在main.cpp中只有一个非常简单的测试程序:
#include <GLFW/glfw3.h>
#include <thread>
int main()
{
glfwInit();
std::this_thread::sleep_for(std::chrono::seconds(1));
glfwTerminate();
}
但我总是在输出中得到这个:
1>main.obj : error LNK2019: unresolved external symbol _glfwInit referenced in function _main
1>main.obj : error LNK2019: unresolved external symbol _glfwTerminate referenced in function _main
1>C:\Users\Adam\Desktop\Revenant\Revenant\Debug\Revenant.exe : fatal error LNK1120: 2 unresolved externals
将 GLFW 提取到 C:\glfw-src
(这样存档中的 CMakeLists.txt
位于 C:\glfw-src\CMakeLists.txt
)
cd C:\glfw-src
mkdir build
cd build
cmake-gui ../
- 按配置,select 工具链
- 将
CMAKE_INSTALL_PREFIX
设置为C:/glfw
- 创建
c:\glfw
目录 - 再次按配置
- 按生成
- 在 Visual Studio 中打开
- 构建 ALL_BUILD 项目的发布版本
- 构建 INSTALL 项目的发布版本
build\GLFW.sln
C:\glfw
现在应该包含 include
和 lib
目录。
假设一个全新的 "Empty Project" 解决方案:
- 编译器:将
c:\glfw\include
添加到/I
(配置属性 -> C/C++ -> 常规 -> 附加包含目录) - 链接器:将
c:\glfw\lib
添加到/LIBPATH
(配置属性 -> 链接器 -> 常规 -> 附加库目录)并将glfw3.lib
&opengl32.lib
添加到/DYNAMICBASE
(配置属性 -> 链接器 -> 输入 -> 附加依赖项)