วิธีสร้างและติดตั้ง GLFW 3 และใช้ในโครงการ Linux


97

GLFW3

เมื่อคืนฉันทำงานดึกพยายามสร้างแพ็คเกจ GLFW 3 สำหรับ Linux จากซอร์ส กระบวนการนี้ใช้เวลานานมากโดยรวมประมาณ 3 ชั่วโมงส่วนหนึ่งเป็นเพราะฉันไม่คุ้นเคยกับ CMake และส่วนหนึ่งเป็นเพราะฉันไม่คุ้นเคยกับ GLFW

ฉันหวังว่าโพสต์นี้จะช่วยให้คุณรอดพ้นจากความยากลำบากเมื่อวานนี้! ฉันคิดว่าฉันควรจะเขียนสั้น ๆ และหวังว่าจะช่วยชีวิตคุณได้หลายชั่วโมง ...

ขอบคุณ "urraka", "b6" และ "niklas" ในช่อง #glfw IRC ทำให้ฉันสามารถใช้ glfw เวอร์ชัน 3.0.1 ได้

ปรากฎว่านี่ไม่ใช่กระบวนการเล็กน้อย (ไม่ใช่สำหรับฉันฉันไม่ใช่ผู้เชี่ยวชาญ) เนื่องจากไม่มีเอกสารเกี่ยวกับ glfw3 บนเว็บมากนักโดยเฉพาะอย่างยิ่งเกี่ยวกับการตั้งค่าด้วย CMake

ฉันถูกขอให้แบ่งสิ่งนี้ออกเป็นส่วนคำถามและคำตอบและฉันได้ทำเช่นนั้นและตอนนี้ส่วนคำตอบอยู่ด้านล่าง

คุณเป็นผู้ดูแล GLFW หรือเป็นสมาชิกของทีม GLFW หรือไม่?

หากผู้ดูแล GLFW3 คนใดเห็นสิ่งนี้แสดงว่าข้อความของฉันถึงพวกเขาโปรดเพิ่มส่วน "การตั้งค่า GLFW3 บน Windows, Mac OS X และ Linux" ในเว็บไซต์ของคุณ! การเขียนโปรแกรมด้วย GLFW นั้นค่อนข้างง่ายเนื่องจากเอกสารออนไลน์ค่อนข้างดีการสแกนคลาสและโมดูลทั้งหมดที่มีอยู่อย่างรวดเร็วและคุณจะพร้อมใช้งาน ตัวอย่างโครงการทดสอบที่ให้ความสำคัญที่นี่ก็ดีมากเช่นกัน ปัญหาหลักสองประการที่ฉันพบคือประการแรกฉันจะตั้งค่า GLFW3 ในระบบของฉันได้อย่างไรและประการที่สองฉันจะสร้างโครงการ GLFW3 ได้อย่างไร สองสิ่งนี้อาจไม่ชัดเจนเพียงพอสำหรับผู้ที่ไม่ใช่ผู้เชี่ยวชาญ

แก้ไข

ดูคร่าวๆวันนี้ (วันที่: 2014-01-14) ดูเหมือนว่าเว็บไซต์ GLFW มีการเปลี่ยนแปลงอย่างหนักตั้งแต่ที่ฉันดูครั้งล่าสุดและตอนนี้มีส่วนในการรวบรวม GLFW และโปรแกรม buliding กับ GLFW ซึ่งฉันคิดว่าเป็นเรื่องใหม่


ขอบคุณที่วางสิ่งนี้ไว้ที่นี่ - เห็นได้ชัดว่ามีงานเข้ามามากมาย คุณช่วยแยกคำถามออกเป็นคำถามและคำตอบได้ไหม คุณสามารถเพิ่มคำตอบของคุณเองสำหรับคำถามของคุณเองและทำเครื่องหมายว่าถูกต้อง
เฟรเซอร์

@ เฟรเซอร์ใช่แน่นอนถ้าคุณคิดว่ามันจะดีกว่านั้น
user3728501

1
ฉันสองที่ ฉันชอบ GLFW มาก แต่รู้สึกหงุดหงิดที่ไม่พบเอกสารใด ๆ เกี่ยวกับวิธีการรวบรวม v3 ใน Mac ฯลฯ
user18490

1
@ user18490 ใช่ฉันพบว่ามันน่าประหลาดใจเพราะ GLFW ดูเหมือนจะ "ดีกว่า" ฉันแน่ใจว่าพวกเขากล่าวถึงในเอกสารของพวกเขาว่า glut นั้นดีสำหรับการเรียนรู้เท่านั้นและถ้าคุณต้องการ window lib แบบมืออาชีพให้ใช้ GLFW สิ่งที่น่าแปลกใจคือพวกเขาบอกคุณว่ามันดีแค่ไหน แต่ไม่ได้บอกวิธีการติดตั้ง! (ค่อนข้างแตกต่างจาก SFML)
user3728501

@ เอ็ดเวิร์ดเบิร์ด. ในที่สุดฉันก็พบข้อมูลที่เป็นประโยชน์ในหน้าเว็บนี้เกี่ยวกับการติดตั้ง GLFW: scratchchapixel.com/lessons/3d-basic-lessons/lesson-2-get-started/…
user18490

คำตอบ:


133

ขั้นตอนที่ 1: การติดตั้ง GLFW 3 บนระบบของคุณด้วย CMAKE

สำหรับการติดตั้งนี้ฉันใช้ KUbuntu 13.04, 64bit

ขั้นตอนแรกคือดาวน์โหลดเวอร์ชันล่าสุด (สมมติว่าเวอร์ชันในอนาคตจะทำงานในลักษณะเดียวกัน) จากwww.glfw.orgโดยอาจใช้ลิงก์นี้

ขั้นตอนต่อไปคือการแตกไฟล์เก็บถาวรและเปิดเทอร์มินัล cdลงในไดเรกทอรี glfw-3.XX และเรียก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 ++ linker ด้านล่าง)

ตอนนี้คุณสามารถพิมพ์makeแล้วmake installซึ่งอาจต้องให้คุณsudoก่อน

โอเคคุณควรได้รับผลลัพธ์ที่ละเอียดในสามขั้นตอน CMake ล่าสุดโดยบอกคุณว่ามีอะไรสร้างขึ้นหรือวางไว้ที่ไหน (ใน/usr/includeตัวอย่างเช่น)

ขั้นตอนที่ 2: สร้างโปรแกรมทดสอบและคอมไพล์

ขั้นตอนต่อไปคือการทำให้ vim ("what ?! vim ?!" คุณพูด) หรือ IDE / text editor ที่คุณต้องการ ... ฉันไม่ได้ใช้ vim ฉันใช้ Kate เพราะฉันใช้ KUbuntu 13.04 ... อย่างไรก็ตามดาวน์โหลดหรือคัดลอกโปรแกรมทดสอบจากที่นี่ (ที่ด้านล่างของหน้า) และบันทึกออก

ตอนนี้รวบรวมโดยใช้g++ -std=c++11 -c main.cpp- ไม่แน่ใจว่าถ้าค ++ 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)

และใช่ฉันต้องการสิ่งนั้นจริงๆ-l!

ขั้นตอนที่ 3: เสร็จแล้วขอให้มีความสุขมาก ๆ ในวันนี้!

หวังว่าข้อมูลนี้จะถูกต้องและทุกอย่างใช้ได้ผลสำหรับคุณและคุณสนุกกับการเขียนโปรแกรมทดสอบ GLFW นอกจากนี้ยังหวังว่าคู่มือนี้ได้ช่วยหรือจะช่วยคนไม่กี่คนในอนาคตที่กำลังดิ้นรนเป็นผมในวันนี้เมื่อวานนี้!

อย่างไรก็ตามแท็กทั้งหมดเป็นสิ่งที่ฉันค้นหาใน stackoverflow เพื่อค้นหาคำตอบที่ไม่มีอยู่จริง (จนถึงตอนนี้) หวังว่าพวกเขาจะเป็นสิ่งที่คุณค้นหาหากคุณอยู่ในตำแหน่งที่คล้ายกับตัวเอง

ผู้เขียนหมายเหตุ:

นี่อาจไม่ใช่ความคิดที่ดี วิธีนี้ (โดยใช้ sudo make install) อาจเป็นอันตรายต่อระบบของคุณ (ดูอย่าทำลาย Debian)

ตามหลักการแล้วฉันหรือคนอื่นควรเสนอวิธีแก้ปัญหาที่ไม่เพียงแค่ติดตั้งไฟล์ lib ฯลฯ ลงในไดเร็กทอรีเริ่มต้นของระบบเนื่องจากควรจัดการโดยผู้จัดการแพ็คเกจเช่นaptการทำเช่นนั้นอาจทำให้เกิดความขัดแย้งและทำลายระบบการจัดการแพ็คเกจของคุณ

ดู "คำตอบปี 2020" ใหม่สำหรับทางเลือกอื่น


ฉันใช้เวลาหลายชั่วโมงในการพยายามคิดออก คำตอบนี้ใช้ได้กับฉัน: Ubuntu 13.04, x64 NetBeans C ++ IDE (เพิ่มบรรทัดตัวเชื่อมโยงใน Project Properties-> Build-> Linker-> Libraries-> Add Option-> Other Option - หรือทำตามคำแนะนำแบบคำต่อคำ)
Scott Drew

เห็นได้ชัดว่า (กับ GLFW 3.0.3) มีบางอย่างที่ใช้powดังนั้นการเพิ่ม-lmตัวเลือกการคอมไพล์จะแก้ไขได้
Forest Katsch

1
เอ็ดเวิร์ดขอบคุณ ฉันต้องการการตรวจสอบสติสัมปชัญญะนี้ว่าข้อกำหนด -l ทั้งหมดไม่ได้หมายความแค่ว่าฉันทำอะไรผิดพลาด
ธรรม

3
เพื่อนคุณเป็น fu **** GENIUS !!!! คุณมีเวลา 3 ชั่วโมงฉันมีเวลา 3 วันในการพยายามทำสิ่งนี้ (จริงๆแล้วการค้นคว้าจากจุดเริ่มต้นอ่านเกี่ยวกับประวัติที่เหลือเฟือและอื่น ๆ อยู่แล้ว) ขอบคุณขอบคุณมากฟู *** มาก; ฉันต้องการคำแนะนำด้วยเช่นกันว่าฉันอ่านหน้า glfw ไม่สามารถทำงานตามบทแนะนำของพวกเขาได้เกือบจะยอมแพ้เมื่อฉันพบสิ่งนี้และพวกเขาไม่ได้อธิบายง่าย ๆ และตรงไปตรงมาเหมือนที่คุณทำ ทำได้ดีมากที่นี่ !!
Victor

1
บน Linux Mint ที่สะอาดฉันต้องติดตั้งแพ็คเกจเหล่านี้:sudo apt-get update && sudo apt-get install build-essential libevent-pthreads-2.0.5 doxygen xorg-dev libglu1-mesa-dev
Lenar Hoyt

18

ฉันแก้ไขด้วยวิธีนี้

ไฟล์ 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  

ฉันไม่รู้ว่า libs เหล่านี้จำเป็นสำหรับการคอมไพล์จริงหรือเปล่า แต่สำหรับฉันมันใช้งานได้ ...


3
คำตอบนี้ต้องดู ฉันไม่ทราบเกี่ยวกับ pkg-config ก่อนหน้านี้ แต่ตั้งแต่วันนี้ฉันจะใช้มันจนจบเพราะมันจะช่วยฉันแก้ปัญหาการเชื่อมโยงทุกประเภท ขอบคุณสำหรับคำตอบที่ยอดเยี่ยม
สายัณห์ภัตตา

18

โปรดทราบว่าคุณไม่จำเป็นต้องมีจำนวนมาก-lหากคุณติดตั้ง 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คุณไม่ต้องพิมพ์ตลอดเวลา


1
ข้อมูลนี้สำคัญมากสำหรับผู้ที่ต้องการตั้งค่า IDE แทนการใช้เทอร์มินัลเพื่อคอมไพล์และรัน คุณสามารถให้รายละเอียดเพิ่มเติมเกี่ยวกับวิธีการนี้ได้หรือไม่? ฉันพยายาม แต่ไม่ประสบความสำเร็จเลย
Victor

Noob ที่นี่! ฉันรู้ว่ามันเก่าไปหน่อย แต่มันช่วยฉันได้จริงๆ ใครช่วยอธิบาย (หรือลิงค์ให้คนอธิบาย) ทำไมการใช้ไลบรารีที่ใช้ร่วมกันจึงทำให้เราไม่ต้องเชื่อมโยงไลบรารีอื่น ๆ ทั้งหมดซึ่งส่วนใหญ่เป็นไฟล์ออบเจ็กต์ที่แชร์ด้วย นอกจากนี้ฉันต้องตั้งค่าตัวแปร LD_LIBRARY_PATHหลังจากคอมไพล์หรือเผชิญกับข้อผิดพลาด gnu เมื่อฉันพยายามเรียกใช้ไฟล์ปฏิบัติการที่คอมไพล์ใหม่
Sammaron

1
สวัสดี Sammaron ขอบคุณที่พูดคุยเกี่ยวกับ LD_LIBRARY_PATH ฉันจะอัปเดตคำตอบของฉันเพื่อรวมสิ่งนี้ เหตุผลที่คุณไม่ต้องระบุไลบรารีอื่น ๆ ทั้งหมดเมื่อใช้ไลบรารี glfw เนื่องจาก glfw โหลดไว้แล้ว คุณสามารถใช้คำสั่งlddเพื่อตรวจสอบว่าไลบรารีใดโหลดโดยโปรแกรมเมื่อรัน นอกจากนี้ยังเป็นวิธีที่ดีในการตรวจสอบว่าพบห้องสมุดอย่างถูกต้อง คุณสามารถใช้lddบนโปรแกรมของคุณและบน /usr/local/lib/libglfw.so เพื่อเปรียบเทียบ
CastleDefender

ขอบคุณสำหรับการตอบกลับ! นอกจากนี้ฉันต้องการแก้ไขตัวเองเล็กน้อย: ตัวแปร LD_LIBRARY_PATH เป็นโซลูชันที่ทำงานได้ แต่ถ้าไลบรารีถูกติดตั้งในเส้นทางมาตรฐานที่ตัวโหลดจะค้นหาต่อไปการรันsudo ldconfigควรแก้ปัญหานี้และไม่ต้องกำหนดค่า LD_LIBRARY_PATH ทุกเวลา. คำตอบนี้เป็นการอภิปรายว่าเหตุใดจึงเป็นที่ต้องการ
Sammaron

หลังจากทำด้วย build shared ฉันต้องรวบรวม / เชื่อมโยงอีก 2 คน g ++ main.cpp -L / usr / local / lib / -lglfw -lGLU -lGL ทำงานให้ฉัน
Sridhar Thiagarajan

9

เนื่องจากคำตอบที่ยอมรับไม่อนุญาตให้แก้ไขเพิ่มเติมฉันจะสรุปด้วยคำสั่งคัดลอกวางเดียว (แทนที่ 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

2
ยอดเยี่ยม! ทำงานให้ฉันบน Ubuntu 16.04 พร้อม GLFW v3.2.1 การแก้ไขเล็กน้อยเพียงสองรายการ: set version = XXX ควรเป็น version = "XXX" และไม่ควรมี. zip ที่ท้ายบรรทัดนี้: cd glfw - $ {version} .zip
Tim

4

คำตอบที่อัปเดตในปี 2020

เป็นปี 2020 (7 ปีต่อมา) และฉันได้เรียนรู้เพิ่มเติมเกี่ยวกับ Linux ในช่วงเวลานี้ โดยเฉพาะอย่างยิ่งว่าอาจไม่ควรเรียกใช้sudo make installเมื่อติดตั้งไลบรารีเนื่องจากอาจรบกวนระบบการจัดการแพ็กเกจ (ในกรณีนี้aptขณะที่ฉันใช้ Debian 10)

หากไม่ถูกต้องโปรดแก้ไขฉันในความคิดเห็น

ทางเลือกที่เสนอทางเลือก

ข้อมูลนี้นำมาจากเอกสาร GLFW อย่างไรก็ตามฉันได้ขยาย / ปรับปรุงข้อมูลที่เกี่ยวข้องกับผู้ใช้ Linux

  • ไปที่โฮมไดเร็กทอรีและโคลนที่เก็บ glfw จาก github
cd ~
git clone https://github.com/glfw/glfw.git
cd glfw
  • ณ จุดนี้คุณสามารถสร้างไดเร็กทอรีบิลด์และทำตามคำแนะนำที่นี่ ( คำแนะนำการสร้าง glfw ) แต่ฉันเลือกที่จะไม่ทำเช่นนั้น คำสั่งต่อไปนี้ยังคงใช้งานได้ในปี 2020 อย่างไรก็ตามคำสั่งออนไลน์ glfw ไม่ได้ระบุไว้อย่างชัดเจน
cmake -G "Unix Makefiles"
  • คุณอาจต้องวิ่งsudo apt-get build-dep glfw3ก่อน (?) ฉันรันทั้งคำสั่งนี้และsudo apt install xorg-devตามคำแนะนำ

  • เรียกใช้ในที่สุด make

  • ตอนนี้ในไดเรกทอรีโครงการของคุณให้ทำดังต่อไปนี้ (ไปที่โครงการของคุณซึ่งใช้ glfw libs)

  • สร้างCMakeLists.txtของฉันมีลักษณะเช่นนี้

CMAKE_MINIMUM_REQUIRED(VERSION 3.7)
PROJECT(project)

SET(CMAKE_CXX_STANDARD 14)
SET(CMAKE_BUILD_TYPE DEBUG)

set(GLFW_BUILD_DOCS OFF CACHE BOOL "" FORCE)
set(GLFW_BUILD_TESTS OFF CACHE BOOL "" FORCE)
set(GLFW_BUILD_EXAMPLES OFF CACHE BOOL "" FORCE)

add_subdirectory(/home/<user>/glfw /home/<user>/glfw/src)


FIND_PACKAGE(OpenGL REQUIRED)

SET(SOURCE_FILES main.cpp)

ADD_EXECUTABLE(project ${SOURCE_FILES})
TARGET_LINK_LIBRARIES(project glfw)
TARGET_LINK_LIBRARIES(project OpenGL::GL)
  • ถ้าคุณไม่ชอบ CMake ฉันก็เห็นด้วย แต่ในความคิดของฉันมันเป็นวิธีที่ง่ายที่สุดในการทำให้โครงการของคุณทำงานได้อย่างรวดเร็ว ฉันอยากจะแนะนำให้เรียนรู้การใช้งานอย่างน้อยก็ถึงระดับพื้นฐาน น่าเสียใจที่ฉันไม่รู้จักการสอน CMake ที่ดี

  • จากนั้นทำcmake .และmakeโครงการของคุณควรสร้างและเชื่อมโยงกับ lib ที่ใช้ร่วมกัน glfw3

  • มีบางวิธีในการสร้าง lib ที่เชื่อมโยงแบบไดนามิก ฉันเชื่อว่าฉันใช้วิธีคงที่ที่นี่ โปรดแสดงความคิดเห็น / เพิ่มส่วนในคำตอบด้านล่างนี้หากคุณรู้มากกว่าที่ฉันทำ

  • สิ่งนี้ควรใช้ได้กับระบบอื่น ๆ หากไม่แจ้งให้เราทราบและฉันจะช่วยถ้าทำได้


2

คำแนะนำที่ดีขอบคุณ จากคำแนะนำส่วนใหญ่ที่นี่เกือบจะสร้างขึ้นสำหรับฉัน แต่ฉันมีข้อผิดพลาดที่เหลืออยู่หนึ่งข้อ

/usr/bin/ld: //usr/local/lib/libglfw3.a(glx_context.c.o): undefined reference to symbol 'dlclose@@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 ในโพสต์ด้านบนอย่างไรก็ตาม


ฉันมีไฟล์. o และ. exec .. โปรดช่วยฉันด้วยวิธีเรียกใช้
พุทธศิลป์จตุรังกา

0

หากใครขี้เกียจและบางทีอาจไม่รู้วิธีกำหนดค่าเชลล์สำหรับไลบรารีและ-l s ทั้งหมดฉันก็สร้างสคริปต์ python (คุณต้องมี python3 ผู้ใช้ linux ส่วนใหญ่มี) ที่ช่วยให้คุณคอมไพล์ได้อย่างง่ายดาย สคริปต์และเรียกใช้โดยไม่ต้องกังวลมากนักมีเพียงการเรียกระบบปกติจัดเรียงอย่างเรียบร้อยฉันสร้างขึ้นเพื่อตัวเอง แต่บางทีมันอาจจะมีประโยชน์: นี่ไง


0

มีคำตอบที่อธิบายไว้อย่างดีอยู่แล้ว แต่ฉันได้อ่านสูตรSHORTERนี้แล้ว :

  1. ติดตั้งLinuxbrew
  2. $ brew install glfw
  3. cd /home/linuxbrew/.linuxbrew/Cellar/glfw/X.X/include
  4. sudo cp -R GLFW /usr/include

คำอธิบาย: เราจัดการสร้าง GLFW โดย CMAKE ซึ่งทำโดย Linuxbrew (พอร์ต Linux ของ Homebrew อันเป็นที่รัก) จากนั้นคัดลอกไฟล์ส่วนหัวไปยังตำแหน่งที่ Linux อ่านจาก ( /usr/include)


โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.