Search code examples
c++ubuntucudaglfw

glfwCreateWindow() fails after installing cuda toolkit


My program that uses glew and glfw used to work finely on Ubuntu. I then installed cuda toolkit, and suddenly it fails because glfwCreateWindow() does not return a proper pointer to a GLFWwindow object.

I installed the cuda toolkit using the instructions in here: https://medium.com/geekculture/installing-cudnn-and-cuda-toolkit-on-ubuntu-20-04-for-machine-learning-tasks-f41985fcf9b2

and this is a minimalistic example:

CMakeLists.txt

cmake_minimum_required(VERSION 2.8)
project(proj)

set (CMAKE_CXX_STANDARD 14)

set(CMAKE_VERBOSE_MAKEFILE ON)


#### use glew ####
find_package(GLEW)
include_directories(${GLEW_INCLUDE_DIRS})

#### use glfw ####
find_package(PkgConfig REQUIRED)
pkg_search_module(GLFW REQUIRED glfw3)
include_directories(${GLFW_INCLUDE_DIRS})

ADD_EXECUTABLE(
proj
main.cpp
)

target_link_libraries(proj ${GLFW_STATIC_LIBRARIES} GLEW GLU GL ${GLEW_LIBRARIES} )

main.cpp


#include <iostream>

#include <GL/glew.h>
#include <GLFW/glfw3.h>


int main()
{
    int GlobalW=1024;
    int GlobalH=800;

    if (!glfwInit())
    {
        std::cout << "GLFW Initialization failed" << std::endl;
        exit(EXIT_FAILURE);
    }

    glfwWindowHint(GLFW_CONTEXT_VERSION_MAJOR, 3);
    glfwWindowHint(GLFW_CONTEXT_VERSION_MINOR, 3);

    GLFWwindow* myWindow = glfwCreateWindow(GlobalW, GlobalH, "DDS-Layers", NULL, NULL);
    if (!myWindow)
    {
        std::cout << "failed to create GLFW Window" << std::endl;
        glfwTerminate();
        exit(EXIT_FAILURE);
    }
    glfwMakeContextCurrent(myWindow);
    glfwSwapInterval(0);

    glewExperimental = GL_TRUE;
    GLenum err = glewInit();
    if (GLEW_OK != err)
    {
        fprintf(stderr, "Error: %s\n", glewGetErrorString(err));
        exit(EXIT_FAILURE);
    }

    return 1;
}

output

failed to create GLFW Window

make

/usr/bin/cmake -S/home/mradwan/c++/play/tryglfw -B/home/mradwan/c++/play/tryglfw/build --check-build-system CMakeFiles/Makefile.cmake 0
/usr/bin/cmake -E cmake_progress_start /home/mradwan/c++/play/tryglfw/build/CMakeFiles /home/mradwan/c++/play/tryglfw/build/CMakeFiles/progress.marks
make -f CMakeFiles/Makefile2 all
make[1]: Entering directory '/home/mradwan/c++/play/tryglfw/build'
make -f CMakeFiles/proj.dir/build.make CMakeFiles/proj.dir/depend
make[2]: Entering directory '/home/mradwan/c++/play/tryglfw/build'
cd /home/mradwan/c++/play/tryglfw/build && /usr/bin/cmake -E cmake_depends "Unix Makefiles" /home/mradwan/c++/play/tryglfw /home/mradwan/c++/play/tryglfw /home/mradwan/c++/play/tryglfw/build /home/mradwan/c++/play/tryglfw/build /home/mradwan/c++/play/tryglfw/build/CMakeFiles/proj.dir/DependInfo.cmake --color=
make[2]: Leaving directory '/home/mradwan/c++/play/tryglfw/build'
make -f CMakeFiles/proj.dir/build.make CMakeFiles/proj.dir/build
make[2]: Entering directory '/home/mradwan/c++/play/tryglfw/build'
[ 50%] Linking CXX executable proj
/usr/bin/cmake -E cmake_link_script CMakeFiles/proj.dir/link.txt --verbose=1
/usr/bin/c++    -rdynamic CMakeFiles/proj.dir/main.cpp.o  -o proj  -lglfw -lrt -lm -ldl -lGLEW -lGLU -lGL -lGLEW 
make[2]: Leaving directory '/home/mradwan/c++/play/tryglfw/build'
[100%] Built target proj
make[1]: Leaving directory '/home/mradwan/c++/play/tryglfw/build'
/usr/bin/cmake -E cmake_progress_start /home/mradwan/c++/play/tryglfw/build/CMakeFiles 0

I also define

export CUDACXX=/usr/local/cuda-11.3/nvcc
export CUDA_LIBRARY_DIRECTORY=/usr/local/cuda-11.3/lib64
export CUDA_INCLUDE_DIRECTORY=/usr/local/cuda-11.3/include

Environment: Ubuntu20.04, GeForce RTX 2070


Solution

  • ok, so as @t.niese suggested in the comments, the solution was simply to restart the computer. I am relatively a beginner in Linux, but I heard that one advantage of Linux over Windows, is that with the former, one does not have to reboot after installing a package/software. Apparently, this is not always the case.