it-swarm.dev

كيفية بناء GLFW 3 وتثبيته وتركيبه في مشروع Linux

GLFW3

الليلة الماضية كنت أعمل متأخراً في محاولة إنشاء حزم GLFW 3 لنظام التشغيل Linux من المصدر. استغرقت هذه العملية وقتًا طويلاً ، حوالي 3 ساعات في المجموع ، ويعود السبب في ذلك جزئيًا إلى أنني غير معتاد على CMake ، ويعود السبب في ذلك جزئيًا إلى أنني لست معتادًا على GLFW.

آمل أن ينقذك هذا المنشور من الصعوبة التي واجهتها بالأمس! اعتقدت أنني يجب أن أقوم بكتابة قصيرة ، ونأمل أن توفر لك عدة ساعات من حياتك ...

بفضل "urraka" و "b6" و "niklas" على القناة #glfw IRC ، تمكنت من تشغيل الإصدار 3.0.1 من glfw.

اتضح أن هذه ليست عملية تافهة (بالتأكيد ليست بالنسبة لي ، أنا لست خبيراً) لأنه لا يوجد الكثير من الوثائق على الويب حول glfw3 ، خاصة حول إعدادها مع CMake.

لقد طُلب مني تقسيم هذا القسم إلى قسم للأسئلة والأجوبة ، ولذا فقد قمت بذلك ، وأجزاء الإجابات موجودة الآن أدناه.

هل أنت مشرف على GLFW ، أو عضو في فريق GLFW؟

إذا رأى أي من المشرفين على GLFW3 ذلك ، فرسالتي إليهم هي الرجاء إضافة قسم "إعداد GLFW3 على أنظمة تشغيل Windows و Mac OS X و Linux" إلى موقع الويب الخاص بك! من السهل تمامًا كتابة البرامج باستخدام GLFW ، نظرًا لأن الوثائق عبر الإنترنت جيدة جدًا ، وهي تفحص سريع لجميع الفئات والوحدات النمطية المتاحة وستكون جاهزًا للذهاب. مثال على اختبار المشروع المميز هنا هو أيضا جيدة جدا. المشكلتان الرئيسيتان اللتان اكتشفتهما هما: أولاً كيف يمكنني إعداد GLFW3 على نظامي ، وثانياً كيف أقوم بإنشاء مشروع GLFW3؟ ربما لا يكون هذان الأمرين واضحين تمامًا بما يكفي لغير خبير.

تصحيح

لقد ألقينا نظرة مختصرة اليوم (التاريخ: 2014-01-14) كما لو أن موقع GLFW قد مر بتغيرات كبيرة منذ آخر مرة نظرت وهناك الآن قسم حول تجميع GLFW وبرامج تنمية المهارات مع GLFW ، والتي أعتقد أنها جديدة.

78
user3728501

الخطوة 1: تثبيت GLFW 3 على نظامك باستخدام CMAKE

بالنسبة لهذا التثبيت ، كنت أستخدم KUbuntu 13.04 ، 64bit.

تتمثل الخطوة الأولى في تنزيل أحدث إصدار (بافتراض الإصدارات في العمل في المستقبل بطريقة مماثلة) من www.glfw.org ، ربما باستخدام هذا link .

والخطوة التالية هي استخراج الأرشيف ، وفتح المحطة. cd في دليل glfw-3.X.X وتشغيله cmake -G "Unix Makefiles" قد تحتاج إلى امتيازات مرتفعة ، وقد تحتاج أيضًا إلى تثبيت تبعيات البناء أولاً . للقيام بذلك ، حاول Sudo apt-get build-dep glfw أو Sudo apt-get build-dep glfw3 أو  افعلها يدويًا، كما فعلت باستخدام Sudo apt-get install cmake xorg-dev libglu1-mesa-dev... قد يكون هناك libs أخرى تحتاجها مثل مكتبات pthread ... من الواضح أنني كنت قد حصلت عليها بالفعل. (راجع خيارات -l المعطاة إلى مرحلة رابط g ++ ، أدناه.)

الآن يمكنك كتابة make ومن ثم make install ، والتي ربما تتطلب منك Sudo أولاً.

حسنًا ، يجب أن تحصل على بعض المخرجات المطوّلة في المراحل الثلاث الأخيرة من CMake ، لإخبارك بما تم بناؤه أو مكانه. (في /usr/include ، على سبيل المثال.)

الخطوة 2: إنشاء برنامج اختبار وتجميع

والخطوة التالية هي إطلاق vim ("ماذا؟ vim ؟!" أنت تقول) أو محرر النص المفضل IDE/... ... لم أستخدم vim ، لقد استخدمت Kate ، لأنني على KUbuntu 13.04 ... على أي حال ، قم بتنزيل أو نسخ برنامج الاختبار من هنا (في الجزء السفلي من الصفحة) وحفظ ، والخروج.

الآن تجميع باستخدام g++ -std=c++11 -c main.cpp - لست متأكداً مما إذا كان c ++ 11 هو مطلوب لكنني استخدمت nullptr لذلك ، كنت في حاجة إليها ... قد تحتاج إلى ترقية ملف gcc إلى الإصدار 4.7 ، أو الإصدار القادم 4.8 ... معلومات عن ذلك هنا .

ثم قم بإصلاح أخطائك إذا كتبت البرنامج يدويًا أو حاولت أن تكون "ذكيًا جدًا" ولم ينجح شيء ... ثم اربطه باستخدام هذا الوحش! g++ main.o -o main.exec -lGL -lGLU -lglfw3 -lX11 -lXxf86vm -lXrandr -lpthread -lXi لذلك ترى ، في الجزء "تثبيت بناء التبعيات" ، قد ترغب أيضًا في التحقق من أنك تملك GL ، GLU ، X11 Xxf86vm (أيا كان هذا) Xrandr posix-thread و Xi (كل ما هو) تطوير المكتبات المثبتة أيضا. ربما قم بتحديث برامج تشغيل الرسومات الخاصة بك أيضًا ، أعتقد أن GLFW 3 قد يتطلب برنامج OpenGL الإصدار 3 أو أعلى؟ ربما شخص ما يمكن أن يؤكد ذلك؟ قد تحتاج أيضًا إلى إضافة خيارات رابط -ldl -lXinerama -lXcursor لجعلها تعمل بشكل صحيح إذا كنت تحصل على مراجع غير محددة إلى dlclose (ائتمان إلى @ user2255242).

ونعم ، أنا فعلا بحاجة إلى الكثير من -ls!

الخطوة 3: لقد انتهيت ، وقد لطيفة اليوم!

نأمل أن تكون هذه المعلومات صحيحة وعملت كل شيء من أجلك ، واستمتعت بكتابة برنامج اختبار GLFW. نأمل أيضًا أن يكون هذا الدليل قد ساعد ، أو سيساعد ، عددًا قليلاً من الأشخاص في المستقبل الذين كانوا يكافحون كما كنت اليوم في الامس!

بالمناسبة ، كل العلامات هي الأشياء التي بحثت عنها في stackoverflow بحثًا عن إجابة لم تكن موجودة. (حتى الآن). نأمل أن يكونوا ما بحثت عنه إذا كنت في وضع مماثل لنفسي.

112
user3728501

لاحظ أنك لا تحتاج إلى العديد من -ls إذا قمت بتثبيت glfw مع خيار BUILD_SHARED_LIBS. (يمكنك تمكين هذا الخيار عن طريق تشغيل ccmake أولاً).

وبهذه الطريقة ، ستقوم Sudo make install بتثبيت المكتبة المشتركة في /usr/local/lib/libglfw.so. يمكنك بعد ذلك ترجمة ملف المثال بطريقة بسيطة:

g++ main.cpp -L /usr/local/lib/ -lglfw

ثم لا تنس إضافة/usr/local/lib/إلى مسار البحث للمكتبات المشتركة قبل تشغيل البرنامج. يمكن القيام بذلك باستخدام:

export LD_LIBRARY_PATH=/usr/local/lib:${LD_LIBRARY_PATH}

ويمكنك وضع ذلك في ~/.bashrc بحيث لا تضطر إلى كتابته في كل وقت.

17
CastleDefender

أنا حلها بهذه الطريقة

يصف ملف pkg-config جميع إشارات وقت الترجمة ووقت الارتباط الضرورية والاعتمادية اللازمة لاستخدام المكتبة.

pkg-config --static --libs glfw3

تبين لي ذلك

-L/usr/local/lib -lglfw3 -lrt -lXrandr -lXinerama -lXi -lXcursor -lGL -lm -ldl -lXrender -ldrm -lXdamage -lX11-xcb -lxcb-glx -lxcb-dri2 -lxcb-dri3 -lxcb-present -lxcb-sync -lxshmfence -lXxf86vm -lXfixes -lXext -lX11 -lpthread -lxcb -lXau -lXdmcp  

لا أعرف ما إذا كانت كل هذه الكتب ضرورية فعلًا للتجميع ولكن بالنسبة لي تعمل ...

15
Oleh Pomazan

نظرًا لأن الإجابة المقبولة لا تسمح بإجراء المزيد من التعديلات ، سأقوم بتلخيصها باستخدام أمر نسخ ولصق واحد (استبدال 3.2.1 بأحدث إصدار متوفر في السطر الأول):

version="3.2.1" && \
wget "https://github.com/glfw/glfw/releases/download/${version}/glfw-${version}.Zip" && \
unzip glfw-${version}.Zip && \
cd glfw-${version} && \
Sudo apt-get install cmake xorg-dev libglu1-mesa-dev && \
Sudo cmake -G "Unix Makefiles" && \
Sudo make && \
Sudo make install

إذا كنت ترغب في ترجمة برنامج ، استخدم الأوامر التالية:

g++ -std=c++11 -c main.cpp && \
g++ main.o -o main.exec -lGL -lGLU -lglfw3 -lX11 -lXxf86vm -lXrandr -lpthread -lXi -ldl -lXinerama -lXcursor

إذا كنت تتبع البرنامج التعليمي learnopengl.com ، فقد تضطر إلى إعداد GLAD أيضًا. في مثل هذه الحالة ، انقر على هذا الرابط

http://glad.dav1d.de/#profile=core&specification=gl&api=gl٪3D3.3&api=gles1٪3Dnone&api=gles2٪3Dnone&api=glsc2٪3Dnone&language=c&loader=on

ثم انقر فوق الزر "إنشاء" في الركن الأيمن السفلي من موقع الويب وقم بتنزيل ملف Zip. قم باستخراجها وتجميع المصادر باستخدام الأمر التالي:

g++ glad/src/glad.c -c -Iglad/include

الآن ، أصبحت أوامر تجميع البرنامج كما يلي:

g++ -std=c++11 -c main.cpp -Iglad/include && \
g++ main.o glad.o -o main.exec -lGL -lGLU -lglfw3 -lX11 -lXxf86vm -lXrandr -lpthread -lXi -ldl -lXinerama -lXcursor
7
4dr14n31t0r Th3 G4m3r

دليل كبير ، شكرا لك. نظرًا لمعظم الإرشادات الموجودة هنا ، تم تصميمه {تقريبًا بالنسبة لي لكن لدي خطأ واحدًا آخر.

/usr/bin/ld: //usr/local/lib/libglfw3.a(glx_context.c.o): undefined reference to symbol '[email protected]@GLIBC_2.2.5'
//lib/x86_64-linux-gnu/libdl.so.2: error adding symbols: DSO missing from command line
collect2: error: ld returned 1 exit status

بعد البحث عن هذا الخطأ ، اضطررت إلى إضافة -ldl إلى سطر الأوامر.

g++ main.cpp -lglfw3 -lX11 -lXrandr -lXinerama -lXi -lXxf86vm -lXcursor -lGL -lpthread -ldl

ثم تجميع نموذج التطبيق "hello GLFW" وربطه.

أنا جديد جدًا على نظام التشغيل linux ، لذلك لست متأكدًا تمامًا مما تفعله هذه المكتبة الإضافية تمامًا ... بخلاف إصلاح خطأ الارتباط. أنا لا أرى أن خط التبديل cmd في آخر أعلاه ، ولكن.

2
user2941878

إذا كان أي شخص يعاني من كسول وربما لا يعرف كيفية تكوين Shell لجميع تلك المكتبات و -l s ، فقمت بإنشاء برنامج نصي من python (يجب أن يكون لديك python3 ، فإن معظم مستخدمي linux لديهم.) الذي يسمح لك بسهولة ترجمة النصوص البرمجية وتشغيلها دون الحاجة إلى القلق ، فهناك فقط مكالمات نظام منتظمة ، مرتبة فقط بدقة ، لقد قمت بإنشائها لنفسي ، لكن ربما يكون ذلك مفيدًا: ومن هنا

0
mathmaniage