12 / 3 / 0
Регистрация: 12.07.2015
Сообщений: 69
|
|||||||||||||||||||||
1 | |||||||||||||||||||||
Сборка программы на openGL, glfw, glew21.06.2019, 23:00. Показов 2645. Ответов 12
Метки нет (Все метки)
Вот уж не думал, что возникнут проблемы с этим... Но я не могу скомпилировать банальную программу c 3-мя инклудами, одним glfwInit и 4-мя glfwWindowHint на mingw-w64 g++, получаю ошибки линковки:
libglew32.a, libglew32.dll.a, libglfw3.a скомпилированы мной лично, но со скачанными пре-компилированными всё то-же самое (правда, я не смог найти прекомпилированную libglew32.a, пришлось линковать с glew32.dll, но проблема всё равно не в нём, а ошибки те-же):
0
|
21.06.2019, 23:00 | |
Ответы с готовыми решениями:
12
Из огня да в полымя. GLFW, GLEW, Линковка Правильная сборка GLFW под VS2015 GLFW + Npp -> NppExec. Не могу Слинковать GLFW LNK1120: 2 unresolved externals | Glew | GLFW |
с++
1282 / 523 / 225
Регистрация: 15.07.2015
Сообщений: 2,562
|
|
21.06.2019, 23:49 | 2 |
так если заработало что еще нужно? И эта ошибка: undefined reference to j обычно когда file.h подключена, а .dll, .lib, .a файлы не добавлены в проект
0
|
12 / 3 / 0
Регистрация: 12.07.2015
Сообщений: 69
|
|
22.06.2019, 18:28 [ТС] | 3 |
Если что, проблема по-прежнему не решена. Я всё ещё хочу знать, почему при линковке как с libglfw3.a, так и с libglew32.a он не находит нужные методы в них, а при линковке с dll не инициализируется glew.
0
|
с++
1282 / 523 / 225
Регистрация: 15.07.2015
Сообщений: 2,562
|
|
22.06.2019, 23:01 | 4 |
Статическая библиотека (также известная как архив) состоит из подпрограмм, которые скомпилированы и связаны непосредственно с вашей программой. Когда вы компилируете программу, которая использует статическую библиотеку, все функции статической библиотеки, которые использует ваша программа, становятся частью вашего исполняемого файла. В Windows статические библиотеки обычно имеют расширение .lib, тогда как в linux статические библиотеки обычно имеют расширение .a (архив). Одним из преимуществ статических библиотек является то, что вам нужно только распространять исполняемый файл, чтобы пользователи могли запустить вашу программу. Поскольку библиотека становится частью вашей программы, это гарантирует, что правильная версия библиотеки всегда используется с вашей программой. Кроме того, поскольку статические библиотеки становятся частью вашей программы, вы можете использовать их так же, как функциональность, написанную для вашей собственной программы. С другой стороны, поскольку копия библиотеки становится частью каждого исполняемого файла, который ее использует, это может привести к значительному расходу пространства. Статические библиотеки также не могут быть легко обновлены - чтобы обновить библиотеку, необходимо заменить весь исполняемый файл.
Динамическая библиотека (также называемая разделяемая библиотека ) состоит из подпрограмм, которые загружаются в приложение во время выполнения. Когда вы компилируете программу, которая использует динамическую библиотеку, библиотека не становится частью вашего исполняемого файла - она остается отдельным модулем. В Windows динамические библиотеки обычно имеют расширение .dll (библиотека динамических ссылок), тогда как в Linux динамические библиотеки обычно имеют расширение .so (общий объект). Одним из преимуществ динамических библиотек является то, что многие программы могут совместно использовать одну копию, что экономит место. Возможно, большее преимущество заключается в том, что динамическая библиотека может быть обновлена до более новой версии без замены всех исполняемых файлов, которые ее используют. Библиотека импорта это библиотека , которая позволяет автоматизировать процесс загрузки и использования динамической библиотеки. В Windows это обычно делается через небольшую статическую библиотеку (.lib) с тем же именем, что и динамическая библиотека (.dll). Статическая библиотека связана с программой во время компиляции, и тогда функциональность динамической библиотеки может эффективно использоваться, как если бы она была статической библиотекой. В Linux файл общего объекта (.so) дублируется как динамическая библиотека, так и библиотека импорта. Большинство компоновщиков могут создавать библиотеку импорта для динамической библиотеки при ее создании.
1
|
12 / 3 / 0
Регистрация: 12.07.2015
Сообщений: 69
|
|
22.06.2019, 23:16 [ТС] | 5 |
Мне это по прежнему ничего не даёт. Различие между статической и динамической библиотекой я знаю. Понятия не имею, собрал ли мне cmake статическую библиотеку или библиотеку импорта (но, скорее всего - первое, так как никакого dll вместе с ним он не собрал), но в любом случае ошибок при сборке то быть не должно! Если бы была проблема с тем, например, что я залинковался с библиотекой импорта, а рядом с exe-шником нет dll-ки, то проблема появилась бы при запуске, но, как я писал - проблема при линковке!
И, не знаю, поняли вы или нет, но я пытаюсь не просто заставить программу компилироваться и работать (ведь скомпилировать я её уже могу, слинковав с dll), а понять, почему не получается нормально слинковать с .a - библиотекой, и как я должен был компилировать исходники glew, glfw и своей собственной программы, что-бы всё в итоге заработало. Чем мне должы били помочь эти непонятно зачем приведённый определения?
0
|
с++
1282 / 523 / 225
Регистрация: 15.07.2015
Сообщений: 2,562
|
|
23.06.2019, 00:17 | 6 |
скачай собраные .lib, .dll, .a
https://www.glfw.org/download.html для mingw .dll и .a, а для Visual Studio .dll, .lib подключаешь и радуешься, Добавлено через 1 минуту https://github.com/glfw/glfw/r... .WIN64.zip https://github.com/glfw/glfw/r... .WIN32.zip
0
|
12 / 3 / 0
Регистрация: 12.07.2015
Сообщений: 69
|
|
23.06.2019, 00:27 [ТС] | 7 |
0
|
с++
1282 / 523 / 225
Регистрация: 15.07.2015
Сообщений: 2,562
|
|
23.06.2019, 00:30 | 8 |
cmake собирает проект на основе которые ты указал в cmake потом этот проект нужно скомпилировать в своей IDE ну в Visual Studio или codeblocks хз что у тебя там вот и все, после компиляции будут dll lib и a, я только что все проделал все работает
0
|
12 / 3 / 0
Регистрация: 12.07.2015
Сообщений: 69
|
|
23.06.2019, 00:38 [ТС] | 9 |
Я собирал банальным cmake -G"MinGW Makefiles" и make. И я использую VS Code, так что, можно сказать, я не использую IDE вообще. Я вообще не люблю IDE, которые делают всё сами и совсем непонятно как...
И учитывая, что с прекомпилированными библиотеками результат тот же - собрал я всё правильно.
0
|
с++
1282 / 523 / 225
Регистрация: 15.07.2015
Сообщений: 2,562
|
|
23.06.2019, 00:42 | 10 |
вот старые версии пробуй их
https://sourceforge.net/projec... /glfw/3.0/ https://sourceforge.net/projec... lfw/2.7.9/
0
|
8Observer8
|
23.06.2019, 10:35
#11
|
Не по теме: --deleted--
0
|
12 / 3 / 0
Регистрация: 12.07.2015
Сообщений: 69
|
|
23.06.2019, 23:52 [ТС] | 12 |
И нужно было всего-то, барабанная дробь... Поставить входной main.o файл перед остальными опциями линкера... Блин, все компиляторы такие неочевидные?
0
|
12 / 3 / 0
Регистрация: 12.07.2015
Сообщений: 69
|
|
24.06.2019, 13:29 [ТС] | 13 |
Кстати, а в чём разница между libglew32.a и libglew32.dll.a? Просто и с тем и с тем программа собирается нормально, но при этом в обоих случаях отказывается работать, если в папке с exe-файлом нет glew32.dll, даже если поставить #define GLEW_STATIC. Я, конечно, не против, но всё-же...
Добавлено через 4 часа 3 минуты Вообще, дело было в том, что в папке с библиотеками был libglew32.dll.a, и g++ почему-то линковал с ним, хотя я указывал -lglew32. А если libglew32.dll.a оттуда убрать, то я получаю кучу undefined reference на __imp_wglGetProcAddress. Ну да ладно, линковка с libglew32.dll.a работает, этого мне пока хватит.
0
|
24.06.2019, 13:29 | |
24.06.2019, 13:29 | |
Помогаю со студенческими работами здесь
13
Как подключить библиотеки GLEW GLFW в проекте на С# VC++ 2015, GLEW, GLFW, ссылка на неразрешённый внешний символ Сборка glfw: как работает cmake? Не видит функций OpenGL, хотя GLFW подключен Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |