Форум программистов, компьютерный форум, киберфорум
Наши страницы
C++: IDE, инструментарий
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.75/4: Рейтинг темы: голосов - 4, средняя оценка - 4.75
Мизантроп_Лол
13 / 13 / 2
Регистрация: 26.02.2013
Сообщений: 285
Завершенные тесты: 1
1

Не линкуется FreeGLUT в CMake (CLion)

20.03.2017, 04:32. Просмотров 783. Ответов 4

Доброго времени суток.
Никак не могу прилинковать FreeGLUT в CMake (который в CLion). FreeGLUT собирал в CLion, импортировав проект из CMake-файла. Собрал и release и debug версии.
Собственно, сам CMake скрипт:
Код
cmake_minimum_required(VERSION 3.6)
project(FreeGLUTTest)

set(CMAKE_CXX_STANDARD 14)

set(SOURCE_FILES main.cpp)

add_library(freeglut STATIC IMPORTED)
set_property(TARGET freeglut PROPERTY IMPORTED_LOCATION_RELEASE ${CMAKE_SOURCE_DIR}/thirdparty/libs/libfreeglut_static.a)
set_property(TARGET freeglut PROPERTY IMPORTED_LOCATION_DEBUG ${CMAKE_SOURCE_DIR}/thirdparty/libs/libfreeglut_static_d.a)
set(LIBRARIES ${LIBRARIES} freeglut)

find_package(OpenGL REQUIRED)
if (NOT OPENGL_FOUND)
    message(ERROR " OpenGL not found!")
endif(NOT OPENGL_FOUND)
set(LIBRARIES ${LIBRARIES} ${OPENGL_LIBRARIES})

add_executable(${PROJECT_NAME} ${SOURCE_FILES})

target_link_libraries(${PROJECT_NAME} ${LIBRARIES})
Программа:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
#include "thirdparty/includes/GL/freeglut.h"
 
void display() {
    glClearColor(0, 0, 0, 1);
    glClear(GL_COLOR_BUFFER_BIT);
 
    glFlush();
}
 
int main(int argc, char** argv) {
    glutInit(&argc, argv);
    glutInitDisplayMode(GLUT_RGBA);
    glutInitWindowSize(512, 512);
    glutInitContextProfile(GLUT_CORE_PROFILE);
    glutCreateWindow(argv[0]);
 
    glutDisplayFunc(display);
 
    glutMainLoop();
 
}
Ругается следующим образом:
Код
"D:\Etc\CLion 2016.3.4\bin\cmake\bin\cmake.exe" --build D:\Etc\programming\FreeGLUTTest\cmake-build-release --target FreeGLUTTest -- -j 2
[ 50%] Linking CXX executable FreeGLUTTest.exe
CMakeFiles\FreeGLUTTest.dir/objects.a(main.cpp.obj):main.cpp:(.text.startup+0x2e): undefined reference to `_imp____glutInitWithExit@12'
CMakeFiles\FreeGLUTTest.dir/objects.a(main.cpp.obj):main.cpp:(.text.startup+0x3e): undefined reference to `_imp__glutInitDisplayMode@4'
D:/CodeBlocks/MinGW/bin/../lib/gcc/mingw32/4.9.2/../../../../mingw32/bin/ld.exe: CMakeFiles\FreeGLUTTest.dir/objects.a(main.cpp.obj): bad reloc address 0x3e in section `.text.startup'
D:/CodeBlocks/MinGW/bin/../lib/gcc/mingw32/4.9.2/../../../../mingw32/bin/ld.exe: final link failed: Invalid operation
collect2.exe: error: ld returned 1 exit status
CMakeFiles\FreeGLUTTest.dir\build.make:96: recipe for target 'FreeGLUTTest.exe' failed
mingw32-make.exe[3]: *** [FreeGLUTTest.exe] Error 1
CMakeFiles\Makefile2:66: recipe for target 'CMakeFiles/FreeGLUTTest.dir/all' failed
mingw32-make.exe[2]: *** [CMakeFiles/FreeGLUTTest.dir/all] Error 2
CMakeFiles\Makefile2:78: recipe for target 'CMakeFiles/FreeGLUTTest.dir/rule' failed
mingw32-make.exe[1]: *** [CMakeFiles/FreeGLUTTest.dir/rule] Error 2
Makefile:117: recipe for target 'FreeGLUTTest' failed
mingw32-make.exe: *** [FreeGLUTTest] Error 2
Попробовал собрать тестовую статическую либу (банальный хэлловорлд) и прилинковать к тестовому проекту - все прошло отлично. А вот с FreeGLUT - беда.
В общем, жду и надеюсь на вашу помощь.

P.S. Да, я знаю про find_package, но это не универсальное средство для подключения либ. Как минимум, при подключении с помощью find_package линковщик не нашел функцию glutInitContextProfile, что может быть следствием того, что ранее я уже ставил GLUT и оно находило его. Но это так, догадка.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
20.03.2017, 04:32
Ответы с готовыми решениями:

Как OpenSSL добавить в линковку CLion (используется cmake и mingw)
Приветствую, друзья. Как добавить OpenSSL в линковку проекта? Я видел...

Boost + Cmake + Clion
Помогите мне подключить Boost к Clion на Windows. Перепробовал уже кучу...

Сборка проекта cmake с вложенными cmake
Всем привет. Подскажите пожалуйста вот у меня есть проектный файл и в нем мне...

Создание GUI в приложении с FreeGlut
Добрый день. Мне поставлена задача добавить поля ввода и несколько кнопок в...

CLion, SFML
Недавно скачал и поставил мультимедийную библиотеку SFML, решил опробовать, но...

4
Мизантроп_Лол
13 / 13 / 2
Регистрация: 26.02.2013
Сообщений: 285
Завершенные тесты: 1
23.03.2017, 15:29  [ТС] 2
Я что-то не указал/указал неправильно, или просто никто не знает, в чем может быть беда?
0
Croessmah
++Ͻ
14611 / 8365 / 1576
Регистрация: 27.09.2012
Сообщений: 20,561
Записей в блоге: 2
Завершенные тесты: 1
23.03.2017, 16:12 3
Как вариант, библиотека собрана другим компилятором,
либо же другой версией того же компилятора,
вследствие чего имеем такие траблы при линковке.
Как вариант могу предложить собрать freeglut своим компилятором,
а не качать готовые сборки этой библиотеки.
Также посмотрите что у Вас в LIBRARIES содержится,
то бишь находится библиотека, или нет,
правильно ли там всё ну и т.д.
0
Мизантроп_Лол
13 / 13 / 2
Регистрация: 26.02.2013
Сообщений: 285
Завершенные тесты: 1
23.03.2017, 21:16  [ТС] 4
Croessmah,
Цитата Сообщение от Croessmah Посмотреть сообщение
Как вариант, библиотека собрана другим компилятором,
либо же другой версией того же компилятора
Цитата Сообщение от Мизантроп_Лол Посмотреть сообщение
FreeGLUT собирал в CLion, импортировав проект из CMake-файла. Собрал и release и debug версии.
Использовал те же IDE/компилятор/линковщик.

Цитата Сообщение от Croessmah Посмотреть сообщение
Также посмотрите что у Вас в LIBRARIES содержится,
Само собой, я туда закинул собранные дебаг и релиз версии либы. И если бы их там не было - линковщик так и ругнулся бы, мол их нет.
0
Croessmah
++Ͻ
14611 / 8365 / 1576
Регистрация: 27.09.2012
Сообщений: 20,561
Записей в блоге: 2
Завершенные тесты: 1
23.03.2017, 21:32 5
Цитата Сообщение от Мизантроп_Лол Посмотреть сообщение
Само собой, я туда закинул собранные дебаг и релиз версии либы.
Я имею ввиду посмотрите содержимое переменной LIBRARIES,
например, с помощью message(STATUS "LIBRARIES: " ${LIBRARIES})
Также выведите полный лог выполняемых cmake и make действий.

Цитата Сообщение от Мизантроп_Лол Посмотреть сообщение
Использовал те же IDE/компилятор/линковщик.
freeglut тоже собирался с опцией set(CMAKE_CXX_STANDARD 14)?
Если нет, то попробуйте эту опцию убрать. А то в gcc поменялся ABI.

и попробуйте это убрать: set(LIBRARIES ${LIBRARIES} freeglut)
а target_link_libraries заменить: target_link_libraries(${PROJECT_NAME} ${LIBRARIES} freeglut)
0
23.03.2017, 21:32
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
23.03.2017, 21:32

Clion и SFML
Добрый день, уважаемые программисты. Недавно, у меня появилась довольно...

Запуск проекта в clion
Всем привет! У меня такая проблема: не могу запустить проект в clio, когда я...

Запуск программы в CLion
Здравствуйте. Столкнулся с проблемой, что не могу настроить конфигурацию...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
5
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru