Ошибка ссылки GLEW: неопределенная ссылка на символ ‘XConvertSelection’

#c #opengl #glfw #undefined-reference #glew

#c #opengl #glfw #неопределенная ссылка #glew

Вопрос:

При попытке создать мой графический проект я получаю:

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

Я попробовал решение другого ответа, который был pkg-config --static --libs x11 xrandr xi xxf86vm glew glfw3

Я поместил его в свой файл .sh, но я не знал, куда его поместить, поэтому я поместил его везде, и он все равно не работал. Это мой run.sh файл

 mkdir build
cd build
pkg-config --static --libs x11 xrandr xi xxf86vm glew glfw3
cmake ..
pkg-config --static --libs x11 xrandr xi xxf86vm glew glfw3
make -j8
pkg-config --static --libs x11 xrandr xi xxf86vm glew glfw3
cd bin
./menger
  

Вся программа работает на моем mac локально, но я пытаюсь запустить ее в нескольких разных средах, чтобы узнать, может ли другой ppl запустить мой проект. Я попробовал это на компьютерах моей школы с Linux, и именно там я получил ошибку выбора xconvert.

Это репозиторий, если это поможет: https://github.com/amit56/Voyage

Кстати, вот мой файл gl3.cmake, это то же самое, что и файл сборки?

 
if (APPLE)
         set(GLEW_INCLUDE_DIRS "/usr/local/Cellar/glew/2.1.0_1/include")
         set(GLEW_LIBRARIES "/usr/local/Cellar/glew/2.1.0_1/lib/libGlEW.a")
endif ()
INCLUDE_DIRECTORIES(${GLEW_INCLUDE_DIRS})
LINK_LIBRARIES(${GLEW_LIBRARIES})

IF (WIN32)
    find_package(glfw3 CONFIG REQUIRED)
    LIST(APPEND stdgl_libraries glfw ${GLEW_LIBRARIES})
ELSE ()
    FIND_PACKAGE(PkgConfig REQUIRED)
    #pkg_search_module(GLFW3 REQUIRED glfw3)
        set(GLFW3_INCLUDE_DIRS "/usr/local/include")
    INCLUDE_DIRECTORIES(${GLFW3_INCLUDE_DIRS})
        set(GLFW3_STATIC_LIBRARIES "/usr/local/lib/libglfw3.a")
    LIST(APPEND stdgl_libraries ${GLFW3_STATIC_LIBRARIES} ${GLEW_LIBRARIES})
ENDIF ()

message(STATUS "GLEW_LIBRARIES=${GLEW_LIBRARIES}")
message(STATUS "GLFW_LIBRARIES=${GLFW3_STATIC_LIBRARIES}")```
  

Комментарии:

1. Вся pkg-config команда, которую вы показываете, перечисляет только библиотеки. На самом деле это не связано с ними. Вам необходимо изменить свой файл сборки, чтобы он действительно связывался с библиотеками.

2. является ли файл сборки тем же, что и gl3.cmake, который я отредактировал в своем вопросе? Все работает на моем собственном компьютере, поэтому я уверен, что библиотеки где-то связаны. Отличается ли процесс компоновки в Linux по сравнению с mac