cdcseacave / openMVS

open Multi-View Stereo reconstruction library
http://cdcseacave.github.io
GNU Affero General Public License v3.0
3.28k stars 901 forks source link

Problem about linking GLFW (MacOS) #296

Open Wotipati opened 6 years ago

Wotipati commented 6 years ago

I got errors in installing openMVS library on macOS. I am on MacOS High Sierra 10.13.3.

It seems to be an error on GLFW's link. Since there is the same issue (https://github.com/cdcseacave/openMVS/issues/202), I tried to reinstall by referring the issue.

In my environment, glfw is linked.

$ brew link glfw
Warning: Already linked: /usr/local/Cellar/glfw/3.2.1
To relink: brew unlink glfw && brew link glfw

But, I couldn't solve the problem. Here is the log.

4 warnings generated.
[100%] Linking CXX executable ../../bin/Viewer
Undefined symbols for architecture x86_64:
  "_glfwCreateWindow", referenced from:
      VIEWER::Window::Init(int, int, char const*) in Window.cpp.o
  "_glfwDefaultWindowHints", referenced from:
      VIEWER::Window::Init(int, int, char const*) in Window.cpp.o
  "_glfwDestroyWindow", referenced from:
      VIEWER::Window::Release() in Window.cpp.o
  "_glfwGetCursorPos", referenced from:
      VIEWER::Window::UpdateMousePosition() in Window.cpp.o
  "_glfwGetKey", referenced from:
      VIEWER::Window::IsShiftKeyPressed() const in Window.cpp.o
      VIEWER::Window::IsCtrlKeyPressed() const in Window.cpp.o
      VIEWER::Window::IsAltKeyPressed() const in Window.cpp.o
  "_glfwGetMouseButton", referenced from:
      VIEWER::Scene::ProcessEvents() in Scene.cpp.o
      VIEWER::Scene::Loop() in Scene.cpp.o
  "_glfwGetTime", referenced from:
      VIEWER::Scene::CastRay(SEACAVE::TRay<double, 3> const&, int) in Scene.cpp.o
  "_glfwGetWindowSize", referenced from:
      VIEWER::Window::SetCamera(SEACAVE::CSharedPtr<VIEWER::Camera>) in Window.cpp.o
  "_glfwHideWindow", referenced from:
      VIEWER::Window::SetVisible(bool) in Window.cpp.o
      VIEWER::Window::Drop(int, char const**) in Window.cpp.o
  "_glfwInit", referenced from:
      VIEWER::Scene::Init(int, int, char const*, char const*, char const*) in Scene.cpp.o
  "_glfwMakeContextCurrent", referenced from:
      VIEWER::Window::Init(int, int, char const*) in Window.cpp.o
      VIEWER::Window::Resize(GLFWwindow*, int, int) in Window.cpp.o
      VIEWER::Window::SetCamera(SEACAVE::CSharedPtr<VIEWER::Camera>) in Window.cpp.o
      VIEWER::Window::Resize(int, int) in Window.cpp.o
  "_glfwPostEmptyEvent", referenced from:
      VIEWER::Image::TransferImage() in Image.cpp.o
      EVTLoadImage::Run(void*) in Scene.cpp.o
      VIEWER::Window::Init(int, int, char const*) in Window.cpp.o
      VIEWER::Window::Reset() in Window.cpp.o
      VIEWER::Window::Key(int, int, int, int) in Window.cpp.o
  "_glfwSetDropCallback", referenced from:
      VIEWER::Window::Init(int, int, char const*) in Window.cpp.o
  "_glfwSetFramebufferSizeCallback", referenced from:
      VIEWER::Window::Init(int, int, char const*) in Window.cpp.o
  "_glfwSetKeyCallback", referenced from:
      VIEWER::Window::Init(int, int, char const*) in Window.cpp.o
  "_glfwSetMouseButtonCallback", referenced from:
      VIEWER::Window::Init(int, int, char const*) in Window.cpp.o
  "_glfwSetScrollCallback", referenced from:
      VIEWER::Window::Init(int, int, char const*) in Window.cpp.o
  "_glfwSetWindowShouldClose", referenced from:
      VIEWER::Window::Key(int, int, int, int) in Window.cpp.o
  "_glfwSetWindowTitle", referenced from:
      VIEWER::Window::SetName(char const*) in Window.cpp.o
  "_glfwShowWindow", referenced from:
      VIEWER::Window::SetVisible(bool) in Window.cpp.o
      VIEWER::Window::Drop(int, char const**) in Window.cpp.o
  "_glfwSwapBuffers", referenced from:
      VIEWER::Scene::Draw() in Scene.cpp.o
  "_glfwTerminate", referenced from:
      VIEWER::Scene::~Scene() in Scene.cpp.o
      VIEWER::Scene::Release() in Scene.cpp.o
  "_glfwWaitEvents", referenced from:
      VIEWER::Scene::ProcessEvents() in Scene.cpp.o
      VIEWER::Scene::Loop() in Scene.cpp.o
  "_glfwWindowHint", referenced from:
      VIEWER::Window::Init(int, int, char const*) in Window.cpp.o
  "_glfwWindowShouldClose", referenced from:
      VIEWER::Scene::Loop() in Scene.cpp.o
ld: symbol(s) not found for architecture x86_64
clang: error: linker command failed with exit code 1 (use -v to see invocation)
make[2]: *** [bin/Viewer] Error 1
make[1]: *** [apps/Viewer/CMakeFiles/Viewer.dir/all] Error 2
make: *** [all] Error 2

Do you have any solutions?

Best Regards,

McMvMc commented 6 years ago

add this line: target_link_libraries(${VIEWER_NAME} "-lglfw -framework Cocoa -framework OpenGL -framework IOKit -framework CoreVideo") after line 56 in openMVS/apps/Viewers/CMakeLists.txt. and it worked

reinstalling glfw didn't work for me

Wotipati commented 6 years ago

Thank you so much for your help!!!