30/09/2018, 19:45
Lỗi "bash ./filename permisson denied" khi run chương trình OpenGL
Em có viết một chương trình OpenGL khá đơn giản và build nó trên linux bằng command line
g++ --std=c++11 -c filename.cpp -lGLEW -lglfw3 -lGL -lGLU -exll -lpthread -exrand -exi -o filename
thì chương trình tạo ra một file là “filename”, đáng lý ra nó phải là file exec nhưng lại không phải, và khi em gõ lệnh
./filename
thì chương trình thông báo lỗi
bash ./filename permisson denied
Cho em hỏi cách fix lỗi này ạ. Đã google search nhưng không fix được.
Bài liên quan
hoặc
nếu không đuợc thì mình chịu.
có flag -c thì nó chỉ compile ra object file thôi chứ đâu có link thành executable
cuối cùng vẫn -o mà bạn. filename tạo thành là file exec
-o chỉ là để đặt tên cho cái file output thôi. Nó đâu có link mấy cái như glew glfw3 gl glu hay pthread gì vô thành file thực thi đâu
ví dụ:
g++ -c main.cpp -o main.o
g++ -c test.cpp -o test.o
thì main.o hay test.o đâu phải là file thực thi. Cái .o có hay ko thì file output vẫn chỉ là object file. Hiểu nó như là 1 chapter của 1 cuốn truyện vậy. -c chỉ dịch chapter đó, ví dụ từ tiếng Nhật sang tiếng Anh thôi. Còn link với mấy chapter khác nữa thì mới thành 1 cuốn truyện hoàn chỉnh:
g++ main.o test.o -o main.exe
hoặc có thể viết gộp compile và link:
g++ main.cpp test.cpp -o main.exe
nhưng viết như vậy thì mỗi lần sửa 1 file, thì phải biên dịch tất cả các file khác lại từ đầu. Dịch từng file riêng biệt thì tránh được vấn đề này. Sửa chapter nào thì dịch lại chapter đó thôi, rồi sau đó link các chapter đã dịch lại.
vậy là do mình hiểu sai rồi, đọc thêm sách đã
Nhưng nếu không có flag -c lại báo lỗi DSO missing ạ.
bạn copy nội dung của cả file bạn compile đi
Đây ạ.
vậy thử compile trước rồi link sau:
g++ -c filename.cpp -o filename.o
g++ filename.o -lGLEW -lglfw3 -lGL -lGLU -exll -lpthread -exrand -exi -o filename
Vẫn lỗi ạ
vậy thì chắc thứ tự link phải đúng
-lGLEW -lglfw3 -lGL -lGLU -exll -lpthread -exrand -exi
thú tự 8 thư viện này ko đúng quá. Nó báo lỗi ở lib nào?
Nó báo ở lglfw3 ạ :((
chắc ta cũng bó tay quá =) Tutorial ở trang nào vậy
Ở learnopengl.com ạ.
thử link với dòng lệnh này thử xem =)
g++ filename.o -o filename -lGLEW -lGL -lGLU -lglfw3 -lX11 -lXxf86vm -lXrandr -lpthread -lXi -ldl -lXinerama -lXcursor
link được nhưng ta chạy trên virtual box ko được =)
Vi diệu quá. Nó chụp màn hình rồi show lên window luôn.
chạy được rồi hả Chớp cái rồi tắt phải ko?
Ko chớp ạ. Dùng double buffer mà anh.