GLFW3
Tadi malam saya bekerja lembur mencoba membangun paket GLFW 3 untuk Linux dari sumbernya. Proses ini memakan waktu yang sangat lama, sekitar 3 jam total, sebagian karena saya tidak terbiasa dengan CMake, dan sebagian lagi karena saya tidak terbiasa dengan GLFW.
Saya harap posting ini akan menyelamatkan Anda dari kesulitan yang saya alami kemarin! Saya pikir saya harus membuat tulisan singkat, dan semoga menyelamatkan Anda beberapa jam hidup Anda ...
Berkat "urraka", "b6", dan "niklas" di saluran IRC #glfw, saya dapat mengaktifkan glfw versi 3.0.1.
Ternyata ini bukanlah proses yang sepele (tentu saja bukan untuk saya, saya bukan ahli) karena tidak banyak dokumentasi di web tentang glfw3, terutama tentang pengaturannya dengan CMake.
Saya diminta untuk membagi ini menjadi bagian tanya jawab, jadi saya telah melakukannya, dan bagian jawaban sekarang ada di bawah.
Apakah Anda pengelola GLFW, atau anggota tim GLFW?
Jika salah satu pengelola GLFW3 melihat ini, maka pesan saya kepada mereka adalah tambahkan bagian "pengaturan GLFW3 di Windows, Mac OS X dan Linux" ke situs web Anda! Sangat mudah untuk menulis program dengan GLFW, karena dokumentasi online cukup bagus, scan cepat dari semua kelas dan modul yang tersedia dan Anda akan siap untuk pergi. Contoh proyek uji yang ditampilkan di sini juga sangat bagus. Dua masalah utama yang saya temukan adalah, pertama bagaimana cara menyiapkan GLFW3 di sistem saya, dan kedua bagaimana cara membangun proyek GLFW3? Kedua hal ini mungkin tidak cukup jelas bagi yang bukan ahli.
Edit
Melihat sekilas hari ini (Tanggal: 2014-01-14) sepertinya situs GLFW telah mengalami perubahan besar sejak saya terakhir melihatnya dan sekarang ada bagian tentang kompilasi GLFW dan program buliding dengan GLFW, yang menurut saya baru.
Jawaban:
Langkah 1: Menginstal GLFW 3 di sistem Anda dengan CMAKE
Untuk instalasi ini, saya menggunakan KUbuntu 13.04, 64bit.
Langkah pertama adalah mengunduh versi terbaru (dengan asumsi versi yang akan datang bekerja dengan cara yang sama) dari www.glfw.org , mungkin menggunakan tautan ini .
Langkah selanjutnya adalah mengekstrak arsip, dan membuka terminal.
cd
ke direktori glfw-3.XX dan menjalankancmake -G "Unix Makefiles"
Anda mungkin memerlukan hak akses yang lebih tinggi, dan Anda mungkin juga perlu menginstal dependensi build terlebih dahulu . Untuk melakukan hal ini, cobalahsudo apt-get build-dep glfw
atausudo apt-get build-dep glfw3
atau melakukannya secara manual , seperti yang saya lakukan menggunakansudo apt-get install cmake xorg-dev libglu1-mesa-dev
... Mungkin ada libs lain yang Anda butuhkan seperti perpustakaan pthread ... Ternyata aku punya mereka sudah. (Lihat opsi -l yang diberikan pada tahap penaut g ++, di bawah.)Sekarang Anda dapat mengetik
make
dan kemudianmake install
, yang mungkin mengharuskan Anda untuk mengetiksudo
terlebih dahulu.Oke, Anda harus mendapatkan beberapa keluaran verbose pada tiga tahap CMake terakhir, memberi tahu Anda apa yang telah dibangun atau di mana ia ditempatkan. (Dalam
/usr/include
, misalnya.)Langkah 2: Buat program pengujian dan kompilasi
Langkah selanjutnya adalah menjalankan vim ("apa ?! vim ?!" katamu) atau editor IDE / teks pilihan Anda ... Saya tidak menggunakan vim, saya menggunakan Kate, karena saya menggunakan KUbuntu 13.04 ... Bagaimanapun, unduh atau salin program uji dari sini (di bagian bawah halaman) dan simpan, keluar.
Sekarang kompilasi menggunakan
g++ -std=c++11 -c main.cpp
- tidak yakin apakah c ++ 11 diperlukan tetapi saya menggunakannyanullptr
, saya membutuhkannya ... Anda mungkin perlu memutakhirkan gcc ke versi 4.7, atau versi 4.8 yang akan datang ... Info tentang itu di sini .Kemudian perbaiki kesalahan Anda jika Anda mengetik program dengan tangan atau mencoba menjadi "terlalu pintar" dan sesuatu tidak berhasil ... Kemudian tautkan program tersebut menggunakan monster ini!
g++ main.o -o main.exec -lGL -lGLU -lglfw3 -lX11 -lXxf86vm -lXrandr -lpthread -lXi
Jadi Anda lihat, di bagian "install build dependencies", Anda mungkin juga ingin memeriksa apakah GL, GLU, X11 Xxf86vm (apa pun itu) Xrandr posix-thread dan Xi (apa pun itu) pustaka pengembangan telah diinstal juga. Mungkin memperbarui driver grafis Anda juga, saya pikir GLFW 3 mungkin memerlukan OpenGL versi 3 atau lebih tinggi? Mungkin seseorang bisa memastikannya? Anda mungkin juga perlu menambahkan opsi linker-ldl -lXinerama -lXcursor
agar berfungsi dengan benar jika Anda mendapatkan referensi yang tidak ditentukan kedlclose
(kredit ke @ user2255242).Dan, ya, saya benar-benar membutuhkan sebanyak
-l
itu!Langkah 3: Anda sudah selesai, semoga harimu menyenangkan!
Semoga informasi ini benar dan semuanya bekerja untuk Anda, dan Anda menikmati menulis program tes GLFW. Juga semoga panduan ini telah membantu, atau akan membantu, beberapa orang di masa depan yang berjuang seperti saya
hari inikemarin!Omong-omong, semua tag adalah hal yang saya cari di stackoverflow untuk mencari jawaban yang tidak ada. (Sampai sekarang.) Mudah-mudahan itulah yang Anda cari jika Anda berada dalam posisi yang sama dengan saya.
Catatan Penulis:
Ini mungkin bukan ide yang bagus. Metode ini (menggunakan sudo make install) mungkin berbahaya bagi sistem Anda. (Lihat Jangan Hancurkan Debian)
Idealnya saya, atau orang lain, harus mengusulkan solusi yang tidak hanya menginstal file lib dll ke direktori default sistem karena ini harus dikelola oleh manajer paket seperti
apt
, dan melakukannya dapat menyebabkan konflik dan merusak sistem manajemen paket Anda.Lihat "jawaban 2020" baru untuk solusi alternatif.
sumber
pow
sehingga menambah-lm
opsi kompilasi memperbaikinya.sudo apt-get update && sudo apt-get install build-essential libevent-pthreads-2.0.5 doxygen xorg-dev libglu1-mesa-dev
Saya menyelesaikannya dengan cara ini
File pkg-config menjelaskan semua tanda waktu kompilasi dan waktu tautan serta dependensi yang diperlukan untuk menggunakan pustaka.
tunjukkan itu padaku
Saya tidak tahu apakah semua lib ini benar-benar diperlukan untuk kompilasi tetapi bagi saya itu berfungsi ...
sumber
Perhatikan bahwa Anda tidak membutuhkan banyak
-l
jika Anda menginstal glfw denganBUILD_SHARED_LIBS
opsi. (Anda dapat mengaktifkan opsi ini dengan menjalankannyaccmake
terlebih dahulu).Dengan cara ini
sudo make install
akan menginstal perpustakaan bersama di/usr/local/lib/libglfw.so
. Anda kemudian dapat mengkompilasi file contoh dengan sederhana:Kemudian jangan lupa untuk menambahkan / usr / local / lib / ke jalur pencarian pustaka bersama sebelum menjalankan program Anda. Ini dapat dilakukan dengan menggunakan:
Dan Anda dapat meletakkannya di Anda
~/.bashrc
sehingga Anda tidak perlu mengetiknya terus-menerus.sumber
ldd
untuk memeriksa pustaka apa yang dimuat oleh program saat dijalankan. Ini juga merupakan cara yang baik untuk memeriksa bahwa perpustakaan ditemukan dengan benar. Anda dapat menggunakanldd
program Anda dan /usr/local/lib/libglfw.so untuk membandingkan.sudo ldconfig
akan menyelesaikan masalah ini, dan tidak memerlukan LD_LIBRARY_PATH untuk dikonfigurasi setiap saat. Jawaban ini memberikan diskusi mengapa ini lebih disukai.Karena jawaban yang diterima tidak memungkinkan pengeditan lagi, saya akan meringkasnya dengan satu perintah salin-tempel (Ganti 3.2.1 dengan versi terbaru yang tersedia di baris pertama):
Jika Anda ingin mengkompilasi program gunakan perintah berikut:
Jika Anda mengikuti tutorial learnopengl.com, Anda mungkin harus menyiapkan GLAD juga. Jika demikian, klik tautan ini
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
lalu klik tombol "Generate" di pojok kanan bawah situs web dan unduh file zip. Ekstrak dan kompilasi sumbernya dengan perintah berikut:
Sekarang, perintah untuk mengkompilasi program Anda menjadi seperti ini:
sumber
Panduan yang bagus, terima kasih. Dengan sebagian besar instruksi di sini, hampir dibuat untuk saya tetapi saya memiliki satu kesalahan yang tersisa.
Setelah mencari kesalahan ini, saya harus menambahkan
-ldl
ke baris perintah.Kemudian aplikasi contoh "hello GLFW" dikompilasi dan ditautkan.
Saya cukup baru mengenal linux jadi saya tidak sepenuhnya yakin apa sebenarnya fungsi perpustakaan tambahan ini ... selain memperbaiki kesalahan penautan saya. Saya memang melihat saklar garis cmd di posting di atas.
sumber
Jika ada yang malas dan mungkin tidak tahu cara mengkonfigurasi shell untuk semua library dan -l s, maka saya membuat skrip python (Anda harus memiliki python3, sebagian besar pengguna linux memilikinya.) Yang memungkinkan Anda untuk dengan mudah mengkompilasi skrip dan menjalankannya tanpa terlalu khawatir, hanya ada panggilan sistem biasa, hanya diatur dengan rapi, saya membuatnya untuk diri saya sendiri tetapi mungkin itu akan berguna: Ini dia
sumber
Jawaban yang dijelaskan dengan baik sudah ada di sana, tetapi saya menggunakan resep SHORTER ini :
$ brew install glfw
cd /home/linuxbrew/.linuxbrew/Cellar/glfw/X.X/include
sudo cp -R GLFW /usr/include
Penjelasan: Kami berhasil membangun GLFW oleh CMAKE yang dilakukan oleh Linuxbrew (port Linux dari Homebrew tercinta). Kemudian salin file header ke tempat Linux membaca (
/usr/include
).sumber
Jawaban yang Diperbarui 2020
Sekarang tahun 2020 (7 tahun kemudian) dan saya telah belajar lebih banyak tentang Linux selama ini. Secara khusus, mungkin bukan ide yang baik untuk menjalankannya
sudo make install
saat menginstal pustaka, karena ini dapat mengganggu sistem manajemen paket. (Dalam hal iniapt
karena saya menggunakan Debian 10.)Jika ini tidak benar, tolong perbaiki saya di komentar.
Solusi alternatif yang diusulkan
Informasi ini diambil dari dokumen GLFW, namun saya telah memperluas / menyederhanakan informasi yang relevan dengan pengguna Linux.
Anda mungkin perlu menjalankan
sudo apt-get build-dep glfw3
sebelum (?). Saya menjalankan perintah ini dansudo apt install xorg-dev
sesuai instruksi.Akhirnya lari
make
Sekarang di direktori proyek Anda, lakukan hal berikut. (Buka proyek Anda yang menggunakan glfw libs)
Buat
CMakeLists.txt
, milik saya terlihat seperti iniJika Anda tidak suka CMake maka saya minta maaf, tetapi menurut saya ini adalah cara termudah untuk membuat proyek Anda bekerja dengan cepat. Saya akan merekomendasikan belajar menggunakannya, setidaknya untuk tingkat dasar. Sayangnya saya tidak tahu ada tutorial CMake yang bagus
Kemudian lakukan
cmake .
danmake
, proyek Anda harus dibuat dan ditautkan ke lib bersama glfw3Ada beberapa cara untuk membuat lib terkait dinamis. Saya yakin saya telah menggunakan metode statis di sini. Tolong beri komentar / tambahkan bagian dalam jawaban di bawah ini jika Anda tahu lebih banyak daripada saya
Ini harus bekerja pada sistem lain, jika tidak beri tahu saya dan saya akan membantu jika saya bisa
sumber