2017-01-17 8 views
0

のUbuntu 14.04、GLFW 3.2.1が見つかりません、OpenGLは、私はOpenGLの例は http://antongerdelan.net/opengl/hellotriangle.html で発見 "こんにちはトライアングル" を構築しようとしていますNVIDIA 367.57CMakeの、GLFW:X11含まれているが、 'XConvertSelection' は

を4.5.0私は困っている。私はGLFWソースをダウンロードし、ソースをビルドし、特別なフラグやオプションをつけずにインストールしました。

以下は、GLFWとSO回答の両方から組み立てられたHello Triangleのファイルsrc/CMakeLists.txtです。ビットの注文を結ぶと格闘した後、ビルドプロセスは、私だけつのエラーを与える:

/usr/bin/ld: //usr/local/lib/libglfw3.a(x11_window.c.o): undefined reference to symbol 'XConvertSelection' /usr/lib/gcc/x86_64-linux-gnu/4.8/../../../x86_64-linux-gnu/libX11.so: error adding symbols: DSO missing from command line collect2: error: ld returned 1 exit status

XConvertSelectionはX11から来るように見えますが、以下に示すように、私は、含まれており、X11にリンクしています。 X11が含まれ、リンクされている場合、なぜこのアイテムは見つかりませんか?

=== SRC/CMakeLists.txt ===

# SOURCE CMAKELISTS 

cmake_minimum_required(VERSION 2.6) 
project(HelloTriangle) 

# ~ Special Libraries ~ 

# First you need to find the PkgConfig package. If this fails, you may need to install the pkg-config package for your distribution. 
find_package(PkgConfig REQUIRED) 

find_package(X11 REQUIRED) 
if(NOT X11_FOUND) 
    message("ERROR: x11 not found") 
endif(NOT X11_FOUND) 

# Note that the dependencies do not include OpenGL or GLU, as GLFW loads any OpenGL, OpenGL ES or Vulkan libraries it needs at runtime and does not use GLU. If your application calls OpenGL directly, instead of using a modern extension loader library you can find it by requiring the OpenGL package. 
find_package(OpenGL REQUIRED) 
if(NOT OPENGL_FOUND) 
    message("ERROR: OpenGL not found") 
endif(NOT OPENGL_FOUND) 

# With just a few changes to your CMakeLists.txt, you can locate the package and target files generated when GLFW is installed. 
find_package(glfw3 3.2 REQUIRED) 

# This creates the CMake commands to find pkg-config packages. Then you need to find the GLFW package. 
pkg_search_module(GLFW REQUIRED glfw3) 

include_directories(${X11_INCLUDE_DIR}) 

# This creates the CMake variables you need to use GLFW. To be able to include the GLFW header, you need to tell your compiler where it is. 
include_directories(${GLFW_INCLUDE_DIRS}) 

# After everything is included, add the executable so that we can link 
add_executable(HelloTriangle hello_triangle.cpp) 

target_link_libraries(HelloTriangle ${X11_LIBRARIES}) 

# Seems like a similar issue: http://stackoverflow.com/questions/14772681/c-compile-error-when-includeing-irrlicht-static-lib 
target_link_libraries(HelloTriangle /usr/lib/x86_64-linux-gnu/libX11.so) 
target_link_libraries(HelloTriangle /usr/lib/x86_64-linux-gnu/libXxf86vm.so.1) 
# target_link_libraries(HelloTriangle /usr/lib/x86_64-linux-gnu/libXxf86vm.so) 

# If OpenGL is found, the OPENGL_FOUND variable is true and the OPENGL_INCLUDE_DIR and OPENGL_gl_LIBRARY cache variables can be used. 
target_include_directories(HelloTriangle PUBLIC ${OPENGL_INCLUDE_DIR}) 

target_link_libraries(HelloTriangle ${OPENGL_gl_LIBRARY}) 

target_link_libraries(HelloTriangle ${GL_LIBRARY}) 

# The OpenGL CMake package also looks for GLU. If GLU is found, the OPENGL_GLU_FOUND variable is true and the OPENGL_INCLUDE_DIR and OPENGL_glu_LIBRARY cache variables can be used. 
target_link_libraries(HelloTriangle ${OPENGL_glu_LIBRARY}) 

# You also need to link against the correct libraries. If you are using the shared library version of GLFW, use the GLFW_LIBRARIES variable. 
target_link_libraries(HelloTriangle ${GLFW_LIBRARIES}) # DYNAMIC: Does not find: XConvertSelection 
# If you are using the static library version of GLFW, use the GLFW_STATIC_LIBRARIES variable instead. 
# target_link_libraries(HelloTriangle ${GLFW_STATIC_LIBRARIES}) # STATIC: Does not find: glewExperimental , glewInit 
+1

「DSOがコマンドラインから抜けています」とは、通常、**リンク**のライブラリの間違った順序を意味します。出力によると、* GLFW *ライブラリは* X11 *ライブラリからのいくつかのシンボルを使用するので、* GLFW * **を** * X11 *の前にリンクする必要があります。 – Tsyvarev

+0

@Tsyvarev、 'XConvertSelection'エラーを取り除きましたが、' dlclose @@ GLIBC_2.2.5'というシンボルが見つかりません。 'VERBOSE = 1'でも' make'出力に基づいて欠けているものを解決することは非常に難しいです。 – SquareCrow

+0

'dlclose @@ GLIBC_2.2.5'の問題は で解決されました。http://stackoverflow.com/questions/23171894/cant-compile-easy-source-in-c-and-opengl-glfw-in-linux-in -netbeans – SquareCrow

答えて

0

SO及び数時間順序をリンクと格闘にさらに掘削した後、私は次がある:

= == SRC/CMakeLists.txtの===

# SOURCE CMAKELISTS 

cmake_minimum_required(VERSION 2.6) 
project(HelloTriangle) 

# ~ Special Libraries ~ 
find_package(PkgConfig REQUIRED) # First you need to find the PkgConfig package 

find_package(X11 REQUIRED) # Make sure x is there 
if(NOT X11_FOUND) 
    message("ERROR: x11 not found") 
endif(NOT X11_FOUND) 

find_package(OpenGL REQUIRED) # Make sure OpenGL is available for direct calls 
if(NOT OPENGL_FOUND) 
    message("ERROR: OpenGL not found") 
endif(NOT OPENGL_FOUND) 

find_package(glfw3 3.2 REQUIRED) # locate the package and target files generated when GLFW is installed. 

pkg_search_module(GLFW REQUIRED glfw3) # CMake commands to find pkg-config packages 

include_directories(${GLFW_INCLUDE_DIRS}) # creates the CMake variables you need to use GLFW. 
include_directories(${X11_INCLUDE_DIR}) # Get all the x stuff 

add_executable(HelloTriangle hello_triangle.cpp) # After everything is included, add the executable 

target_include_directories(HelloTriangle PUBLIC ${OPENGL_INCLUDE_DIR}) # Obviously 

target_link_libraries(HelloTriangle ${GLFW_LIBRARIES}) # If using the shared library, GLFW_LIBRARIES 
# target_link_libraries(HelloTriangle ${GLFW_STATIC_LIBRARIES}) # If using the static library, GLFW_STATIC_LIBRARIES 
target_link_libraries(HelloTriangle ${OPENGL_gl_LIBRARY}) # More OpenGL stuff I guess? 
target_link_libraries(HelloTriangle ${GL_LIBRARY}) 
target_link_libraries(HelloTriangle ${OPENGL_glu_LIBRARY}) # The OpenGL CMake package also looks for GLU. 
# http://stackoverflow.com/questions/23171894/cant-compile-easy-source-in-c-and-opengl-glfw-in-linux-in-netbeans 
target_link_libraries(HelloTriangle GLEW m dl Xinerama Xrandr Xi Xcursor pthread) # GLFW misses this stuff! 
# Seems like a similar issue: http://stackoverflow.com/questions/14772681/c-compile-error-when-includeing-irrlicht-static-lib 
target_link_libraries(HelloTriangle /usr/lib/x86_64-linux-gnu/libX11.so) # x11 linking misses this stuff! 
target_link_libraries(HelloTriangle /usr/lib/x86_64-linux-gnu/libXxf86vm.so.1) 
target_link_libraries(HelloTriangle ${X11_LIBRARIES}) # x11 ! 

この正確なセットアップが林に普遍的ではないかもしれませんuxシステムを使用していましたが、リンクオーダーの成功に役立つと思いました。

関連する問題