C++ 无法打开文件';glew_static_vs2010.lib';和布拉格评论
我正试图从一本关于现代OpenGL的书开始。在本书中,我需要链接一些lib(即C++ 无法打开文件';glew_static_vs2010.lib';和布拉格评论,c++,static-linking,cl,C++,Static Linking,Cl,我正试图从一本关于现代OpenGL的书开始。在本书中,我需要链接一些lib(即freeglutglew32verilion32)。我已经下载了glew的源代码并生成了lib。链接我生成的lib没有问题,但作者似乎使用了pragma注释,这导致了一些链接错误 LINK : fatal error LNK1104: cannot open file 'glew_static_vs2010.lib' NMAKE : fatal error U1077: '"C:\Program Files (x86)
freeglut
glew32
verilion32
)。我已经下载了glew的源代码并生成了lib。链接我生成的lib没有问题,但作者似乎使用了pragma注释
,这导致了一些链接错误
LINK : fatal error LNK1104: cannot open file 'glew_static_vs2010.lib'
NMAKE : fatal error U1077: '"C:\Program Files (x86)\Microsoft Visual Studio 14.0\VC\BIN\cl.EXE"' : return code '0x2'
在代码中使用的一个标题文件(即vgl.h
)中,有以下几行
#ifndef __VGL_H__
#define __VGL_H__
// #define USE_GL3W
#ifdef USE_GL3W
#include <GL3/gl3.h>
#include <GL3/gl3w.h>
#else
#define GLEW_STATIC
#include <GL/glew.h>
#ifdef _MSC_VER
# ifdef _DEBUG
# if (_MSC_VER >= 1600)
# pragma comment (lib, "glew_static_vs2010_d.lib")
# else
# pragma comment (lib, "glew_static_d.lib")
# endif
# else
# if (_MSC_VER >= 1600)
# pragma comment (lib, "glew_static_vs2010.lib")
# else
# pragma comment (lib, "glew_static.lib")
# endif
# endif
#endif
#endif
#define FREEGLUT_STATIC
#include <GL/freeglut.h>
#ifdef _MSC_VER
# ifdef _DEBUG
# if (_MSC_VER >= 1600)
# pragma comment (lib, "freeglut_static_vs2010_d.lib")
# else
# pragma comment (lib, "freeglut_static_d.lib")
# endif
# else
# if (_MSC_VER >= 1600)
# pragma comment (lib, "freeglut_static_vs2010.lib")
# else
# pragma comment (lib, "freeglut_static.lib")
# endif
# endif
#endif
#define BUFFER_OFFSET(x) ((const void*) (x))
#endif /* __VGL_H__ */
Microsoft编译器允许使用
#pragma comment(lib,“libraryname.lib”)
指定链接器应该使用的库,而不是在命令行上将它们传递给链接器。由于您构建了自己的库,您可能应该注释掉这些完整的块,以便从vgl.h
自动链接(甚至删除它们):
\ifndef\uu VGL\H__
#定义__
//#定义使用_GL3W
#ifdef使用_GL3W
#包括
#包括
#否则
#定义GLEW_静态
#包括
//#ifdef(硕士学位)
//#ifdef_调试
//#如果(_MSC_VER>=1600)
//#pragma注释(lib,“glew_static_vs2010_d.lib”)
//#其他
//#pragma注释(lib,“glew_static_d.lib”)
//#endif
//#其他
//#如果(_MSC_VER>=1600)
//#pragma注释(lib,“glew_static_vs2010.lib”)
//#其他
//#pragma注释(lib,“glew#u static.lib”)
//#endif
//#endif
//#endif
#恩迪夫
#定义FREEGLUT\u静态
#包括
//#ifdef(硕士学位)
//#ifdef_调试
//#如果(_MSC_VER>=1600)
//#pragma注释(lib,“freeglut_static_vs2010_d.lib”)
//#其他
//#pragma注释(lib,“freeglut_static_d.lib”)
//#endif
//#其他
//#如果(_MSC_VER>=1600)
//#pragma注释(lib,“freeglut_static_vs2010.lib”)
//#其他
//#pragma注释(lib,“freeglut_static.lib”)
//#endif
//#endif
//#endif
#定义缓冲区偏移量(x)((常量无效*)(x))
#endif/*.\uu VGL\u H\uu*/
Microsoft编译器允许使用#pragma注释(lib,“libraryname.lib”)
指定链接器应该使用的库,而不是在命令行上将它们传递给链接器。由于您构建了自己的库,您可能应该注释掉这些完整的块,以便从vgl.h
自动链接(甚至删除它们):
\ifndef\uu VGL\H__
#定义__
//#定义使用_GL3W
#ifdef使用_GL3W
#包括
#包括
#否则
#定义GLEW_静态
#包括
//#ifdef(硕士学位)
//#ifdef_调试
//#如果(_MSC_VER>=1600)
//#pragma注释(lib,“glew_static_vs2010_d.lib”)
//#其他
//#pragma注释(lib,“glew_static_d.lib”)
//#endif
//#其他
//#如果(_MSC_VER>=1600)
//#pragma注释(lib,“glew_static_vs2010.lib”)
//#其他
//#pragma注释(lib,“glew#u static.lib”)
//#endif
//#endif
//#endif
#恩迪夫
#定义FREEGLUT\u静态
#包括
//#ifdef(硕士学位)
//#ifdef_调试
//#如果(_MSC_VER>=1600)
//#pragma注释(lib,“freeglut_static_vs2010_d.lib”)
//#其他
//#pragma注释(lib,“freeglut_static_d.lib”)
//#endif
//#其他
//#如果(_MSC_VER>=1600)
//#pragma注释(lib,“freeglut_static_vs2010.lib”)
//#其他
//#pragma注释(lib,“freeglut_static.lib”)
//#endif
//#endif
//#endif
#定义缓冲区偏移量(x)((常量无效*)(x))
#endif/*.\uu VGL\u H\uu*/
它仍然抛出此错误链接:致命错误LNK1104:无法打开文件'glew\u static\u vs2010.lib'
它仍然抛出此错误链接:致命错误LNK1104:无法打开文件'glew\u static\u vs2010.lib'
CC = cl
CFLAGS = /EHsc /c
INCLUDES = \
/I D:\CPP_Projects\CommandPrompt\ModernOpenGL\Books\Opengl_Programming_Guide_8th\oglpg_8th_edition\include
LIBS = \
/LIBPATH:D:\CPP_Projects\CommandPrompt\ModernOpenGL\Books\Opengl_Programming_Guide_8th\oglpg_8th_edition\lib \
freeglut_staticd.lib glew32sd.lib vermilion32_d.lib
all: project
project: triangles.obj LoadShaders.obj
$(CC) /EHsc /Fetest.exe triangles.obj LoadShaders.obj \
/link $(LIBS)
triangles.obj: triangles.cpp
$(CC) $(CFLAGS) triangles.cpp $(INCLUDES)
LoadShaders.obj: LoadShaders.cpp
$(CC) $(CFLAGS) LoadShaders.cpp $(INCLUDES)
clean:
del *.exe *.obj
#ifndef __VGL_H__
#define __VGL_H__
// #define USE_GL3W
#ifdef USE_GL3W
#include <GL3/gl3.h>
#include <GL3/gl3w.h>
#else
#define GLEW_STATIC
#include <GL/glew.h>
// #ifdef _MSC_VER
// # ifdef _DEBUG
// # if (_MSC_VER >= 1600)
// # pragma comment (lib, "glew_static_vs2010_d.lib")
// # else
// # pragma comment (lib, "glew_static_d.lib")
// # endif
// # else
// # if (_MSC_VER >= 1600)
// # pragma comment (lib, "glew_static_vs2010.lib")
// # else
// # pragma comment (lib, "glew_static.lib")
// # endif
// # endif
// #endif
#endif
#define FREEGLUT_STATIC
#include <GL/freeglut.h>
// #ifdef _MSC_VER
// # ifdef _DEBUG
// # if (_MSC_VER >= 1600)
// # pragma comment (lib, "freeglut_static_vs2010_d.lib")
// # else
// # pragma comment (lib, "freeglut_static_d.lib")
// # endif
// # else
// # if (_MSC_VER >= 1600)
// # pragma comment (lib, "freeglut_static_vs2010.lib")
// # else
// # pragma comment (lib, "freeglut_static.lib")
// # endif
// # endif
// #endif
#define BUFFER_OFFSET(x) ((const void*) (x))
#endif /* __VGL_H__ */