c++ - 链接glfw g++
问题描述
我一直在尝试在不使用 IDE 的情况下使用 OpenGL 进行编码,但是手动链接确实让我感到困惑。我有一个包含 libglfw3.a、glfw3.h 和一个包含此示例代码的 .cpp 文件的文件夹。
#include "glfw3.h"
int main(void)
{
GLFWwindow* window;
/* Initialize the library */
if (!glfwInit())
return -1;
/* Create a windowed mode window and its OpenGL context */
window = glfwCreateWindow(640, 480, "Hello World", NULL, NULL);
if (!window)
{
glfwTerminate();
return -1;
}
/* Make the window's context current */
glfwMakeContextCurrent(window);
/* Loop until the user closes the window */
while (!glfwWindowShouldClose(window))
{
/* Render here */
glClear(GL_COLOR_BUFFER_BIT);
/* Swap front and back buffers */
glfwSwapBuffers(window);
/* Poll for and process events */
glfwPollEvents();
}
glfwTerminate();
return 0;
}
我是这样编译的。
g++ source.cpp -lglfw3 -o program
然而我得到了这些错误。
C:\Users\murra\Coding\Manual>g++ source.cpp -lglfw3 -o proc
C:\Users\murra\AppData\Local\Temp\ccO7xs1Q.o:source.cpp:(.text+0x17): undefined reference to `glfwInit'
C:\Users\murra\AppData\Local\Temp\ccO7xs1Q.o:source.cpp:(.text+0x56): undefined reference to `glfwCreateWindow'
C:\Users\murra\AppData\Local\Temp\ccO7xs1Q.o:source.cpp:(.text+0x64): undefined reference to `glfwTerminate'
C:\Users\murra\AppData\Local\Temp\ccO7xs1Q.o:source.cpp:(.text+0x76): undefined reference to `glfwMakeContextCurrent'
C:\Users\murra\AppData\Local\Temp\ccO7xs1Q.o:source.cpp:(.text+0x81): undefined reference to `glfwWindowShouldClose'
C:\Users\murra\AppData\Local\Temp\ccO7xs1Q.o:source.cpp:(.text+0x96): undefined reference to `_imp__glClear@4'
C:\Users\murra\AppData\Local\Temp\ccO7xs1Q.o:source.cpp:(.text+0xa6): undefined reference to `glfwSwapBuffers'
C:\Users\murra\AppData\Local\Temp\ccO7xs1Q.o:source.cpp:(.text+0xab): undefined reference to `glfwPollEvents'
C:\Users\murra\AppData\Local\Temp\ccO7xs1Q.o:source.cpp:(.text+0xb2): undefined reference to `glfwTerminate'
collect2.exe: error: ld returned 1 exit status
我对这些东西很陌生,所以我们将不胜感激。
解决方案
当您链接第三方库时,您需要“告诉”编译器标头的位置以及库的位置。
通常,除了-l<lib_name>之外,还会使用-I<header_dir>和-L< lib_dir>
您还可以使用-I<header_dir>和-L<full_lib_path>将其减少到 2 个步骤
如果链接导致错误,IMO 有 3 个主要原因。
- 路径不正确
- 混合共享库和静态库标志(示例 - VS 上的-MT和-MD )
- 您未包含的其他库依赖项。
在您的情况下,缺少的符号似乎来自其他库。尝试-lglfw3 -lglew32 -lopengl32 -lgdi32作为附加选项。显然,这些需要在您的计算机上。
推荐阅读
- android - ViewModel 可以观察父 ViewModel 吗?
- java - 正则表达式捕获组并忽略最后两个字符,其中一个是可选的
- python - 从父查询集中检索 prefetch_related 对象的平面查询集
- java - 使用 byte-buddy (System.nanoTime()) 拦截并更改静态本机方法的返回值
- python - 如何使用正则表达式仅提取字符串的整数部分
- python - 有没有办法从 tf.layers.conv1d 中删除 BatchToSpaceND?
- bash - Git钩子:'.git/hooks/pre-commit':不允许操作
- javascript - Javascript 开放端口扫描器
- algorithm - 求阶乘(n)的递归算法运行时间的递归关系
- sql - 插入触发器后在同一张表上选择失败?