2010-01-01 71 views
12

Tôi lập trình C++ ứng dụng trên (Ubuntu) Linux và biên dịch chúng tới 2 hệ điều hành: natively để Linux bằng cách sử dụng "g ++" (GNU C++) và cross-biên dịch chúng để của Windows bằng cách sử dụng "i386-mingw32-g ++" (trình biên dịch chéo MinGW C++).OpenGL + Mesa 3D + MinGW

Bây giờ, tôi đang cố gắng biên dịch các ứng dụng "OpenGL" (từ Linux sang Windows) - vì tôi cần một số tệp thư viện OpenGL.
Khi triển khai OpenGL, tôi sử dụng thư viện nguồn mở "Mesa 3D". May mắn thay, Ubuntu cung cấp thư viện mesa3d "biên dịch sẵn" (libgl1-mesa-devlibglu1-mesa-dev) cho Linux, nhưng không may là không có thư viện biên dịch sẵn để sử dụng với trình biên dịch chéo MinGW. chúng) - vì vậy tôi "PHẢI" tự biên dịch chúng "từ nguồn" (có thể tải xuống từ trang chủ http://www.mesa3d.org).

Nhưng tôi không có ý tưởng để làm điều đó. Trong mã nguồn mesa3d, có một số tài liệu về cách xây dựng các thư viện cho một số nền tảng cụ thể - cụ thể là có tệp readme "README.MINGW32".
Nhưng chỉ trên dòng đầu tiên có một số lệnh

mingw32-make -f Makefile.mgw [OPTIONS...] 

mà tôi không thể chạy vì tôi không có bất kỳ chương trình "mingw32-làm" cài đặt. Bởi các phần mềm khác, tôi đã sử dụng để xây dựng chúng với các "cổ điển"

./configure -> make -> make install 

quy trình này, nhưng điều này không hoạt động trên thư viện mesa3d.
Ví dụ, tôi cũng đã cố gắng

./configure --host=i386-mingw32 

và nó đã được cấu hình ok nhưng sau khi nhập

make 

nó ném một số lỗi

error: #error No PIPE_SUBSYSTEM_WINDOWS_xxx subsystem defined. 

và bây giờ tôi đang LOST: - (.

Vì vậy, không ai biết cách xây dựng thư viện mesa3d cho r sử dụng chúng với mingw32?

P.S .: Và dĩ nhiên, Tôi KHÔNG MUỐN để sử dụng Microsoft Visual Studio KHÔNG BAO GIỜ THÊM :-). Và tôi cũng muốn làm tất cả những thứ cần thiết để xây dựng môi trường OpenGL từ Linux và sử dụng mingw32 để biên dịch chéo. Tôi hy vọng điều đó là có thể.

P.S.2: Trên trang http://www.mesa3d.org/systems.html có văn bản sử dụng MinGW với Mesa 3D "không được dùng nữa". Tôi đang đúng cách để sử dụng nó theo cách đó?

+0

Chỉ cần tự hỏi ... OpenGL thường được sử dụng để truy cập phần cứng tăng tốc 3D. Bằng cách sử dụng mesa trên windows, bạn sử dụng phần mềm thực thi trên windows. Đó có thực sự là điều bạn muốn không? Nếu không, bạn chỉ cần sử dụng các thư viện opengl do windows cung cấp. – Bahbar

+0

Mục tiêu chính của tôi là "kiến trúc độc lập" khi viết mã C++ -> do đó tôi nghĩ rằng sử dụng thư viện đa nền tảng ("mesa3d" trong trường hợp này) là một cách hay để đạt được điều đó, tôi không biết, có thể tôi là sai. Vì vậy, tôi nên hiểu nó để trong "mỗi Windows" có một số "thư viện" thực hiện OpenGL và khi tôi viết một số mã OpenGL trên máy Linux của mình, tôi không cần phải phân phối bất kỳ thư viện OpenGL bổ sung nào với chương trình của tôi? Nếu có, thư viện nào là - "opengl.dll", "libopengl.lib" hoặc cái gì? – Petike

+0

OpenGL thường được hiển thị như một phần của nền tảng. Đối với Windows, Microsoft đã vận chuyển một giao diện OpenGL (opengl.lib) trong nền tảng SDK của nó mãi mãi. Tôi không chắc chắn chính xác làm thế nào bạn đi về xây dựng .a cho mingw linker ra khỏi những người, nhưng nó chắc chắn là khác nhau từ việc sử dụng mesa. – Bahbar

Trả lời

16

Không cần biên dịch Mesa3D cho MinGW. MinGW bao gồm thư viện GL; nó không được gọi là libGL.a cũng không phải libGLU.a; thay vào đó, các thư viện được gọi là libopengl32.alibglu32.a. Đáng buồn thay, đây là những gì Microsoft quyết định gọi chúng trong Windows trên Visual Studio, vì vậy cả Windows và GNU/Linux phát hành của MinGW quyết định bao gồm các thư viện có tên như trên.

Vì vậy, khi xuyên biên soạn dành cho Windows, chỉ cần thay đổi:

-lGL -lGLU 

vào

-lopengl32 -lglu32 

Mesa3D trên GNU/Linux thực sự là một tên cho một libre thực hiện OpenGL . Điều này là do OpenGL là một thương hiệu và chính sách của SGI không cho phép bất kỳ ai sử dụng tên mà không phải trả một khoản tiền khổng lồ. Mặc dù vậy, SGI đã cung cấp cho tác giả, Brian Paul, một bản sao của bộ thử nghiệm.

Mesa3D có trên hầu hết các nền tảng với triển khai OpenGL gốc được gọi là thư viện "kiểm tra độ" phần mềm với mô phỏng nhiều tính năng chỉ dành cho phần cứng cao cấp. Nhưng trên GNU/Linux, quan trọng hơn nhiều là một cái gì đó gọi là DRI hoặc giao diện dựng hình trực tiếp. Đây là thỏa thuận thực sự, tăng tốc phần cứng và tất cả. Thư viện này còn được gọi là Mesa3D; trên thực tế, việc cung cấp DRI là một phần của Mesa3D cũng như của X11 và hạt nhân.

Mesa3D cung cấp libre tiêu đề tương thích OpenGL trên GNU/Linux và các nền tảng miễn phí khác.

Tóm tắt: Mesa3D là tên để triển khai OpenGL GNU/Linux vì tên đó được đăng ký nhãn hiệu. Thư viện này bao gồm một phần mềm tuyệt vời, có tính năng, chính xác và tương đối nhanh. Nó cũng bao gồm giao diện hiển thị trực tiếp để tăng tốc phần cứng.

+0

Cảm ơn bạn rất nhiều. Nhân tiện, cũng có thư viện biên dịch sẵn trong gcc "gốc" của tôi mà tôi có trên Linux hay tôi phải sử dụng thư viện mesa3d khi biên dịch cho Linux? – Petike

+0

Tôi sẽ chỉnh sửa câu trả lời của mình. –

+1

Không có điều gì giống như bản phát hành "GNU/Linux của MinGW". Họ là hai điều riêng biệt. MinGW trông giống nhau từ mọi góc độ. – rubenvb

Các vấn đề liên quan