我正在尝试将GLEW和GLFW dll链接到我的项目。我正在使用SCons来制作。我的SConstruct文件是:
env=Environment();
env.SharedLibrary('glfw3.dll');
env.SharedLibrary('glew32.dll');
env.Program('tutorial01.cpp');
glfw3.dll和glew32.dll都在C:\ Windows \ System32中。当我尝试构建它时,这是构建结果:
scons: Reading SConscript files ...
scons: done reading SConscript files.
scons: Building targets ...
link /nologo /OUT:tutorial01.exe tutorial01.obj
tutorial01.obj : error LNK2019: unresolved external symbol __imp_glClearColor referenced in function main
tutorial01.obj : error LNK2019: unresolved external symbol glewInit referenced in function main
tutorial01.obj : error LNK2019: unresolved external symbol __imp_glfwInit referenced in function main
tutorial01.obj : error LNK2019: unresolved external symbol __imp_glfwTerminate referenced in function main
tutorial01.obj : error LNK2019: unresolved external symbol __imp_glfwWindowHint referenced in function main
tutorial01.obj : error LNK2019: unresolved external symbol __imp_glfwCreateWindow referenced in function main
tutorial01.obj : error LNK2019: unresolved external symbol __imp_glfwWindowShouldClose referenced in function main
tutorial01.obj : error LNK2019: unresolved external symbol __imp_glfwPollEvents referenced in function main
tutorial01.obj : error LNK2019: unresolved external symbol __imp_glfwSetInputMode referenced in function main
tutorial01.obj : error LNK2019: unresolved external symbol __imp_glfwGetKey referenced in function main
tutorial01.obj : error LNK2019: unresolved external symbol __imp_glfwMakeContextCurrent referenced in function main
tutorial01.obj : error LNK2019: unresolved external symbol __imp_glfwSwapBuffers referenced in function main
tutorial01.exe : fatal error LNK1120: 12 unresolved externals
scons: *** [tutorial01.exe] Error 1120
scons: building terminated because of errors.
scons: *** Found dependency cycle(s):
glew32.lib -> glew32.lib
glfw3.dll -> glfw3.dll
File "C:\Python27\Scripts\..\Lib\site-packages\scons-2.3.3\SCons\Taskmaster.py", line 1043, in cleanup
[Finished in 0.9s with exit code 2]
[cmd: ['C:\\Python27\\Scripts\\Scons.bat']]
[dir: C:\Users\mark\programming\sublime-try2]
[path: C:\PROGRAM FILES (X86)\INTEL\ICLS CLIENT\;C:\PROGRAM FILES\INTEL\ICLS CLIENT\;C:\PHP\;C:\PROGRAM FILES (X86)\JAHSHAKA\..\MLT\BIN;C:\PROGRAM FILES (X86)\OPENLIBRARIES\BIN;;C:\NODEJS\;C:\WINDOWS\SYSTEM32;C:\WINDOWS;C:\WINDOWS\SYSTEM32\WBEM;C:\WINDOWS\SYSTEM32\WINDOWSPOWERSHELL\V1.0\;C:\PROGRAM FILES (X86)\INTEL\INTEL(R) MANAGEMENT ENGINE COMPONENTS\DAL;C:\PROGRAM FILES (X86)\INTEL\INTEL(R) MANAGEMENT ENGINE COMPONENTS\IPT;C:\PROGRAM FILES\MICROSOFT SQL SERVER\110\TOOLS\BINN\;C:\PROGRAM FILES (X86)\QUICKTIME\QTSYSTEM\;C:\PROGRAM FILES\INTEL\INTEL(R) MANAGEMENT ENGINE COMPONENTS\DAL;C:\PROGRAM FILES\INTEL\INTEL(R) MANAGEMENT ENGINE COMPONENTS\IPT;C:\PROGRAM FILES (X86)\INTEL\INTEL(R) MANAGEMENT ENGINE COMPONENTS\DAL;C:\PROGRAM FILES (X86)\INTEL\INTEL(R) MANAGEMENT ENGINE COMPONENTS\IPT;C:\Program Files\Lenovo\Bluetooth Software\;C:\Program Files\Lenovo\Bluetooth Software\syswow64;C:\Program Files (x86)\K-3D 0.8.0.1\bin;C:\Program Files (x86)\Microsoft SDKs\TypeScript\1.0\;C:\Program Files (x86)\Windows Kits\8.1\Windows Performance Toolkit\;C:\Program Files (x86)\Microsoft Visual Studio 12.0\VC\bin\;C:\Python27\Scripts\;C:\Users\mark\AppData\Roaming\npm]
暂时忽略链接错误,最后一部分的含义是什么,它说“找到依赖循环”?这很重要吗?难道我做错了什么?另外,tutorial01.cpp来自opengl-tutorial.org,但有点修改了一下:
// Include standard headers
#include <stdio.h>
#include <stdlib.h>
// we're building a static!
#define GLEW_STATIC
// Include GLEW
#include <GL/glew.h>
// so it works with dll
#define GLFW_DLL
// Include GLFW
#include <glfw3.h>
GLFWwindow* window;
// Include GLM
#include <glm/glm.hpp>
using namespace glm;
int main( void )
{
// Initialise GLFW
if( !glfwInit() )
{
fprintf( stderr, "Failed to initialize GLFW\n" );
return -1;
}
glfwWindowHint(GLFW_SAMPLES, 4);
glfwWindowHint(GLFW_CONTEXT_VERSION_MAJOR, 3);
glfwWindowHint(GLFW_CONTEXT_VERSION_MINOR, 3);
glfwWindowHint(GLFW_OPENGL_PROFILE, GLFW_OPENGL_CORE_PROFILE);
// Open a window and create its OpenGL context
window = glfwCreateWindow( 1024, 768, "Tutorial 01", NULL, NULL);
if( window == NULL ){
fprintf( stderr, "Failed to open GLFW window. If you have an Intel GPU, they are not 3.3 compatible. Try the 2.1 version of the tutorials.\n" );
glfwTerminate();
return -1;
}
glfwMakeContextCurrent(window);
// Initialize GLEW
if (glewInit() != GLEW_OK) {
fprintf(stderr, "Failed to initialize GLEW\n");
return -1;
}
// Ensure we can capture the escape key being pressed below
glfwSetInputMode(window, GLFW_STICKY_KEYS, GL_TRUE);
// Dark blue background
glClearColor(0.0f, 0.0f, 0.4f, 0.0f);
do{
// Draw nothing, see you in tutorial 2 !
// Swap buffers
glfwSwapBuffers(window);
glfwPollEvents();
} // Check if the ESC key was pressed or the window was closed
while( glfwGetKey(window, GLFW_KEY_ESCAPE ) != GLFW_PRESS &&
glfwWindowShouldClose(window) == 0 );
// Close OpenGL window and terminate GLFW
glfwTerminate();
return 0;
}
头文件也正确地位于visual studio包含文件夹中
为什么我得到依赖循环错误的任何想法?还是链接错误?
答案 0 :(得分:1)
SharedLibrary方法不用于指定您想要使用DLL,而是创建它们。对于使用现有的库/ DLL,您必须将其名称添加到LIBS环境变量中,从中获取实际的链接器调用。
您看到的依赖项错误与您尝试创建已存在的DLL的事实直接相关。
从你的写作开始,你似乎只是从SCons开始...所以我的建议是看看UserGuide(请参阅http://www.scons.org/doc/production/HTML/scons-user.html获取HTML版本)并浏览简单的例子至少。