2014-10-01 68 views
0

我想链接GLEW和GLFW dll到我的项目。我正在使用SCons来制作。我的SConstruct文件是:依赖周期Scons GLEW,GLFW

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包括文件夹以及

任何想法,为什么我得到的依赖周期错误?或者链接错误?

回答

1

SharedLibrary方法不是用来指定你想使用DLL,而是创建它们。为了使用一个已经存在的库/ DLL,你必须把它的名字添加到LIBS环境变量中,从那里获取实际的链接器调用。

您看到的依赖关系错误与您尝试创建已存在的DLL的事实直接相关。

从你写的东西看来,你刚刚开始使用SCons ......所以我的建议是看看UserGuide(HTML版本请参阅http://www.scons.org/doc/production/HTML/scons-user.html)并至少浏览一下简单的例子。

+0

好吧,我会尝试你的建议,并回(当)(如果)它的工作!另外,C++或SCons中的LIBS环境变量是什么? – Markasoftware 2014-10-02 01:07:41

+0

好吧,我相信我已经在'Program'调用中修复了我的SCONStruct文件,但是它会自动将'.lib'添加到我放置的库的名称末尾。我怎样才能使它添加到一个结尾的DLL? – Markasoftware 2014-10-02 01:21:23

+0

尝试在名称末尾添加'.dll',但它仍然不起作用。我目前正在使用'SConstruct'文件:'env = Environment(); LIBPATH = ['C:\\ Windows \\ System32','C:\\ Program Files文件(['tutorial01.cpp'],LIBS = ['glfw3','glfw3dll','glew32']) (x86)\\ Microsoft Visual Studio 12.0 \\ VC \\ lib']);' – Markasoftware 2014-10-02 01:30:19

相关问题