markasoftware
markasoftware

Reputation: 12672

Dependency Cycle Scons GLEW, GLFW

I'm trying to link with GLEW and GLFW dlls to my project. I'm using SCons to make. My SConstruct file is:

env=Environment();
env.SharedLibrary('glfw3.dll');
env.SharedLibrary('glew32.dll');
env.Program('tutorial01.cpp');

glfw3.dll and glew32.dll are both in C:\Windows\System32. When I try to build it, here's the build results:

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]

Ignoring the link errors for now, what's the meaning of the last part, where it says "found dependency cycle"? Is that important? Am I doing something wrong? Also, tutorial01.cpp is from opengl-tutorial.org but's modified a bit:

// 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;
}

the header files are correctly located in the visual studio includes folder as well

Any ideas why I'm getting the dependency cycle error? Or the link errors?

Upvotes: 0

Views: 830

Answers (1)

dirkbaechle
dirkbaechle

Reputation: 4052

The SharedLibrary methods aren't there for specifiying that you want to use a DLL, they create them. For using an already existing library/DLL you have to add its name to the LIBS environment variable, from where it gets picked up for the actual linker call.

The dependency error you see is directly connected to the fact that you're trying to create a DLL that already exists.

From what you write, it seems that you're just starting with SCons...so my recommendation is to have a look at the UserGuide ( see http://www.scons.org/doc/production/HTML/scons-user.html for the HTML version ) and skim through the simple examples at least.

Upvotes: 1

Related Questions