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
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.