LINUX.ORG.RU

Make install или пакеты

 , , , ,


0

1

Предыстория: требуется заняться opengl, нужен glfw. Плюсы я не шибко люблю и как следствие - не знаю инструментов разработки под них, ни cmake, ни make. Ну, ладно, есть гугл: http://stackoverflow.com/questions/17768008/how-to-build-install-glfw-3-and-u... Теперь проблем с

#include <GLFW/glfw3.h>
нету.

Но вот тут мне на глаза попадается сия статья: https://habrahabr.ru/post/130868/ Я задумался: делать pkgbuild? Ненароком, я точно забуду про то, что у меня где-то лежали исходники и потру, а потом будет гемморой подчищать за собой /usr/ Странно еще то, что нету -dev пакета даже в aur. Я устанавливал glfw-x11, но, видимо, он ставит бинарники просто, чтобы программы, использующие эту либу, работали.

Кроме того, пробовал получить бинарники и заголовки, чтобы просто использовать их в проекте (по аналогии http://learnopengl.com/#!Getting-started/Creating-a-window но в qt creator), что закончилось... странно. Исполняемые примеры - собрались, запускал, а вот что использовать в своем проекте - не нашел.

Я точно что-то делаю не так, но и не могу понять в какую сторону смотреть: make install - плохо, pkgbuild - почему тогда его нету в репах? Кроме того, я не понимаю, где лежат библиотеки:

$ sudo make install
[sudo] password for jakutenshi: 
[ 15%] Built target glfw
[ 18%] Built target heightmap
[ 21%] Built target gears
[ 26%] Built target particles
[ 29%] Built target wave
[ 31%] Built target boing
[ 33%] Built target simple
[ 36%] Built target splitview
[ 39%] Built target reopen
[ 42%] Built target joysticks
[ 46%] Built target monitors
[ 49%] Built target iconify
[ 53%] Built target glfwinfo
[ 57%] Built target gamma
[ 60%] Built target icon
[ 64%] Built target tearing
[ 68%] Built target empty
[ 71%] Built target cursor
[ 75%] Built target threads
[ 79%] Built target clipboard
[ 82%] Built target title
[ 85%] Built target sharing
[ 89%] Built target windows
[ 93%] Built target events
[ 97%] Built target msaa
[100%] Built target timeout
Install the project...
-- Install configuration: ""
-- Installing: /usr/local/include/GLFW
-- Installing: /usr/local/include/GLFW/glfw3native.h
-- Installing: /usr/local/include/GLFW/glfw3.h
-- Installing: /usr/local/lib/cmake/glfw3/glfw3Config.cmake
-- Installing: /usr/local/lib/cmake/glfw3/glfw3ConfigVersion.cmake
-- Installing: /usr/local/lib/cmake/glfw3/glfw3Targets.cmake
-- Installing: /usr/local/lib/cmake/glfw3/glfw3Targets-noconfig.cmake
-- Installing: /usr/local/lib/pkgconfig/glfw3.pc
-- Installing: /usr/local/lib/libglfw3.a

Там просто заголовки и cmake файлы же. Каким образом линкуется моя программа, использующая glfw? Ну и как _правильно_ надо сделать, чтобы работать?

★★

Последнее исправление: JAkutenshi (всего исправлений: 2)

нету -dev пакета

В арче нет разделения на дев и не дев пакеты

pkgbuild - почему тогда его нету в репах?

Тебе makepkg нужен. PKGBUILD это текстовый файл, инструкция, по которой makepkg собирает пакет. И вообще - марш на арчвики

man_of_motley ★★
()

нету.

 $ pacman -Fs glfw3.h
community/emscripten 1.36.1-1
    usr/lib/emscripten/system/include/GLFW/glfw3.h
community/glfw 3.1.2-1
    usr/include/GLFW/glfw3.h
Medar ★★★★★
()
Последнее исправление: Medar (всего исправлений: 1)
Ответ на: комментарий от man_of_motley

В арче нет разделения на дев и не дев пакеты

Но ведь: https://aur.archlinux.org/packages/?O=50&K=-dev&PP=50

И вообще - марш на арчвики

Смотреть... makepkg?

Medar

pacman -Fs glfw3.h
warning: database file for 'core' does not exist
warning: database file for 'extra' does not exist
warning: database file for 'community' does not exist
warning: database file for 'multilib' does not exist

JAkutenshi ★★
() автор топика
Ответ на: комментарий от JAkutenshi

Файл glfw3.h есть в пакете glfw.

warning: database file for 'core' does not exist

Я думал, что каждый в первую очередь читает man к пакетному менеджеру своего дистрибутива линукс.

Medar ★★★★★
()
Ответ на: комментарий от Medar

Ну, ранее мне F не надо было. Впрочем, уже поправился (-Fy), да, есть. Но я не понимаю, почему тогда не линковалась она.

JAkutenshi ★★
() автор топика

Предыстория: требуется заняться opengl, нужен glfw. Плюсы я не шибко люблю и как следствие

glfw

Плюсы

Где тут плюсы, хейтерок? https://github.com/glfw/glfw

EXL ★★★★★
()
Ответ на: комментарий от ddos3

Да, про заголовок понял, а вот что бинарный файл имеет расширение *.a - не знал. Думал *.lib, например. Спасибо.

man_of_motley, алсо, наткнувшись на то, что glm не имеет uninstall для make и его убирать пришлось вручную, активно читаю как создавать свой пакет.

JAkutenshi ★★
() автор топика
Ответ на: комментарий от JAkutenshi

На линуксах статические либы lib<name>.a, динамические lib<name>.so.

ddos3
()
Ответ на: комментарий от Medar

Я думал, что каждый в первую очередь читает man к пакетному менеджеру своего дистрибутива линукс.

Взоржал.

ashot ★★★★
()
Ответ на: комментарий от Medar

Так, я удалил собственноручно (через make install) поставленный glfw, чтобы не было дублирования. Заголовок есть:

$ sudo pacman -Fs glfw3.h
[sudo] password for jakutenshi: 
community/emscripten 1.36.13-1
    usr/lib/emscripten/system/include/GLFW/glfw3.h
community/glfw-wayland 3.2.1-1
    usr/include/GLFW/glfw3.h
community/glfw-x11 3.2.1-1
    usr/include/GLFW/glfw3.h

Но во время сборки, ругается, что не может найти методы, например:

/home/jakutenshi/study/qt/opengl-lab/OpenGL_Scene/main.cpp:13: error: undefined reference to `glfwInit'

Константы разрешает нормально, а автокомплит методы видит. Что не так?

JAkutenshi ★★
() автор топика
Ответ на: комментарий от JAkutenshi

(извиняюсь, что несколько сообщений подряд, но править не могу, а идеи приходят не сразу) Библиотека так же имеется:

$ sudo pacman -Fs libglfw3.a
[sudo] password for jakutenshi: 
community/luxrays 1.6-3
    usr/lib/libglfw3.a

JAkutenshi ★★
() автор топика

Господи, ну и наркомания, катать такую-то простыню, вместо того, установить пакет из реп (даже не из AUR'а!).

Ну и как _правильно_ надо сделать, чтобы работать?

sudo pacman -S glfw
curl https://raw.githubusercontent.com/glfw/glfw/4591ad2d64f7b6be1aab63c1964adaf23ebe08be/examples/simple.c > simple.c
gcc simple.c -lglfw -lGLEW -lGL
./a.out
EXL ★★★★★
()
Ответ на: комментарий от EXL

Я понял, что так проще, в чем наркомания? И то, и другое - должно работать. Я решил установить glfw-x11 из реп. Во время сборки получаю ошибки, чего при make не было. Законный вопрос: почему?

Ваш пример собрал и все работает. В своем добавил LIBS += -lglfw -lGLEW -lGL - собралось тоже.

Собственно, вывод: make install - плохо, когда нету покаетов в репозиториях, то создавать свой через makepkg.

Оставшиеся вопросы: как понимать, как называются библиотеки, которые я скарливаю линкеру? -lglfw, но в системе оно установилось как libglfw.so + вариации с разными версиями в постфиксе. Как понять что писать, и как это поймет линкер?

JAkutenshi ★★
() автор топика
Ответ на: комментарий от JAkutenshi

Я решил установить glfw-x11 из реп. Во время сборки получаю ошибки, чего при make не было. Законный вопрос: почему?

Ты видишь у меня ошибки? Я поставил точно такой же пакет. Никаких ошибок. И то и другое должно работать и работает. Почему у тебя не работает — это только твои проблемы, очевидно потому что ты что-то делаешь не так. Ты спросил как правильно и проще, я показал тебе как правильно и проще.

Собственно, вывод: make install - плохо

Вывод убунтёнка. В прямых руках, что make install (если юзать его по уму с DESTDIR=/opt/glfw, к примеру), что makepkg — одинаково. Пакет, конечно предпочтителен, но не всегда есть время его собирать. К тому же, если ты откроешь любой PKGBUILD, то узришь там тот же самый make install.

https://aur.archlinux.org/cgit/aur.git/tree/PKGBUILD?h=mingw-w64-glfw#n47

Оставшиеся вопросы: как понимать, как называются библиотеки, которые я скарливаю линкеру? -lglfw, но в системе оно установилось как libglfw.so + вариации с разными версиями в постфиксе. Как понять что писать, и как это поймет линкер?

Вот вместо того, чтобы читать ахинею на быдлохабре, лучше бы взял и прочитал документацию к gcc/ld. И увидел бы там, что -lglfw разворачивается в libglfw.so, для того и проставлены симлинки на эту либу, которые ты называешь «вариациями».

Как понять что писать, и как это поймет линкер?

-lglfw == libglfw.so
-lGLEW == libGLEW.so
-lGL == libGL.so

EXL ★★★★★
()
Последнее исправление: EXL (всего исправлений: 2)
Ответ на: комментарий от EXL

Ты видишь у меня ошибки? Я поставил точно такой же пакет. Никаких ошибок. И то и другое должно работать и работает. Почему у тебя не работает — это только твои проблемы, очевидно потому что ты что-то делаешь не так. Ты спросил как правильно и проще, я показал тебе как правильно и проще.

Ну, ошибки были потому, что у меня в qmake не были приписаны библиотеки. Но странно то, что когда glfw был установлен через make install, то редактировать qmake файл не требовалось: проект был собран без ошибок. Почему? Есть предположение, что раз там была либа с расширением *.a, то динамическая линковка, а значит он просто видел, что она существует и использовал ее функции во время выполнения - так? А чтобы скомпилировать со статическими библиотеками, ему нужно, судя по всему, конкретно указать библиотеку. Почему он тогда так же не может по «стандартному» пути ее найти?

Вывод убунтёнка.

*вздох* Арч мой первый дистрибутив, если не считать элементари на виртуалке, чтобы сдать лабу года 1.5 назад. К чему это уже второй раз?

К тому же, если ты откроешь любой PKGBUILD, то узришь там тот же самый make install.

Да, но управление пакетом уже удобнее. Я не уверен, про самописные пакеты, но пакеты из аура так же удаляются через yaourt.

Вот вместо того, чтобы читать ахинею на быдлохабре, лучше бы взял и прочитал документацию к gcc/ld. И увидел бы там, что -lglfw разворачивается в libglfw.so, для того и проставлены симлинки на эту либу, которые ты называешь «вариациями».

Ну, статью на хабре я увидел, вбив в гугле make install прямо таки первой ссылкой. А по запросу gcc ld выдает язык управления линковщиком.

JAkutenshi ★★
() автор топика
Ответ на: комментарий от JAkutenshi

По поводу линковки, кажется, вопрос снят, ибо все наоборот с библиотеками.

JAkutenshi ★★
() автор топика
Ответ на: комментарий от JAkutenshi

Почему? Есть предположение, что раз там была либа с расширением *.a, то динамическая линковка, а значит он просто видел, что она существует и использовал ее функции во время выполнения - так? А чтобы скомпилировать со статическими библиотеками, ему нужно, судя по всему, конкретно указать библиотеку. Почему он тогда так же не может по «стандартному» пути ее найти?

Смешались, люди, кони. Библиотеки .a внезапно стали динамическими, а приложение вдруг начало использовать dlopen, ага. Достаточно посмотреть в лог компиляции, чтобы понять почему собралось или не собралось. Скорее всего там был -Wl,-rpath-link,/usr/local/lib. Никакой магии.

Арч мой первый дистрибутив

Если бы Arch Linux был твоим первым дистрибутивом, ты бы не искал -dev-пакеты и не читал стейки на БХ, посвящённые мифическому вреду make install.

А по запросу gcc ld выдает язык управления линковщиком.

Первые две ссылки по запросу «gcc link libraries»:
https://gcc.gnu.org/onlinedocs/gcc/Link-Options.html
https://www.cs.swarthmore.edu/~newhall/unixhelp/howto_C_libraries.html

А вот даже на русском языке:

http://uzverss.livejournal.com/57883.html

EXL ★★★★★
()
Ответ на: комментарий от EXL

Скорее всего там был -Wl,-rpath-link,/usr/local/lib.

Нет, просто много undefined reference, на какждый вызов функции.

ты бы не искал -dev-пакеты

Я посчитал, что они есть, потому что есть отдельные пакеты chromium и chromium-dev. Ну и статья по опенгл, скорее-всего, была написана под убунту и там упоминались эти либы. Справедливости ради, их не оказалось в репозиториях, я и забил на это дело. (а потом все-равно мучался с либами)

gcc link libraries
link

Я-то load вбивал, поэтому и. Пошел читать, спасибо.

JAkutenshi ★★
() автор топика

Просто --prefix

Можно сделать make --prefix=/home/username/somewhere && make install.

Тогда все бинари и заголовки будут в указанной директории - и система чиста, и с пакетами возиться не надо.

aldaril_kote
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.