为什么我必须显式调用我的库
Why do I have to call my library explicitly?
我遵循OpenGL教程,我在最后一步,使用GLEW设置FPS计数器。我有一个问题,我不得不使用#pragma comment(lib, "glew32sd.lib")
来成功地链接我的库。而对于freeglut,我不需要显式地引用它。
我的结构很简单,
library
dll
freeglut.dll
glew32d.dll
include
GL
freeglut.h
freeglut_ext.h
freeglut_std.h
glew.h
glut.h
glxew.h
wglew.h
lib
freeglut.lib
glew32d.lib
glew32sd.lib
我已经将Visual Studio设置为包含include dir并在lib中查找其他库。将dll文件夹设置为通过构建后作业复制到输出中。我很确定它是有效的,因为到目前为止,一切都很好。
如何是Visual Studio 不能够链接辉光,但它是与freeglut工作?它们在同一个目录中。我看到freeglut被链接了,因为我在链接器的输出1> Processed /DEFAULTLIB:freeglut.lib
中看到了它。这两个库都是从我的电脑上编译的。
我试图将GLEW编译为静态库,所以我假设编译器不加载.dll,所以我不妨删除它。但在这两种情况下都行不通。我试过使用#define GLEW_STATIC
和#define GLEW_BUILD
,都不能连接。
然后我偶然发现了一个关于SO的答案,发现如果我做了#pragma comment(lib, "glew32sd.lib")
,它会正确加载我的库。现在我假设通过显式地告诉链接器使用这个.lib,它可以使它工作。但是为什么免费下载会自动加载呢?我没有直接引用它。
现在我的代码是工作,但我只是好奇。我是一个新的c++开发人员,静态库和动态库的概念在我的脑海中仍然太新鲜了。
您需要通过pragma或Project-> linker ->Input->Additional Dependencies区域告诉链接器您使用哪些库。
在freeglut的情况下,除非您显式地将FREEGLUT_LIB_PRAGMAS
定义为0
,否则将在freeglut_std.h
中为您提供pragmas。如果你这样做了,你就需要通过你自己的pragmas或者在Additional Dependencies区域手动添加依赖项。
通常由您来添加所需的依赖项。根据我的经验,库很少会尝试自动执行。
- 为什么我的运算符 + 重载尽管是通过引用传递的,但仍调用我的复制构造函数?
- 什么时候可以使用常量装饰调用我的重载函数?
- 为什么当我做复制和交换习语时不调用我的复制构造函数?
- 钩/绕道 d3d9 (现在/结束场景) - 似乎调用我的函数然后崩溃
- 为什么在这种情况下不调用我的虚拟函数实现?
- 在linux中,mono调用我的.so-lib返回System.EntryPointNotFoundException
- 当我从头文件和实现文件调用我的函数到我的主文件时,我没有得到任何输出
- 为什么没有调用我的回调?
- 如何制作指针来调用我的成员函数
- 如何在Android Studio中编写CMakelists来调用我的C 项目(JNI)的功能
- 为什么在这种情况下不调用我的移动构造函数?(首先分配 r 值引用并创建对象)
- 我如何调用我的3个数据成员中每个人的设置方法,然后显示由我的设置方法设置的值
- 为什么没有调用我的覆盖方法
- 我的类中有方法的指针数组,但我不能调用我的方法.代码如下
- C++模板:无法从 main.cpp 调用我的函数
- 为什么我继承的构造函数调用我的基本默认构造函数
- 我如何在C#GUI中调用我的C 程序
- SetWindowsHookEx没有调用我的回调
- c++ Glut 显示需要调用我的绘制函数,但我无法传递任何参数
- 如何从对象中调用我的set回调函数