2012-01-15 21 views
8

Tôi đã cố gắng sử dụng tập tin glew32.lib để liên kết trong dự án của tôi, hơn tôi biên dịch Glew nguồn của bản thân mình để có được tập tin glew.a. Bây giờ, tôi có các lỗi liên kết này trong dự án của tôi:Làm thế nào để sử dụng GLEW với MinGW

g++ -o Chapter10(OpenCLTest).exe src\Chapter10(OpenCLTest).o -lopengl32 -lglew -lglut32 -lglu32 -lopencl 
src\Chapter10(OpenCLTest).o:Chapter10(OpenCLTest).cpp:(.text+0x167): undefined reference to `_imp____glewBindBuffer' 
src\Chapter10(OpenCLTest).o:Chapter10(OpenCLTest).cpp:(.text+0x39a): undefined reference to `_imp__glewInit' 
src\Chapter10(OpenCLTest).o:Chapter10(OpenCLTest).cpp:(.text+0x3a7): undefined reference to `_imp__glewIsSupported' 
src\Chapter10(OpenCLTest).o:Chapter10(OpenCLTest).cpp:(.text+0x48a): undefined reference to `_imp____glewGenBuffers' 
src\Chapter10(OpenCLTest).o:Chapter10(OpenCLTest).cpp:(.text+0x495): undefined reference to `_imp____glewBindBuffer' 
src\Chapter10(OpenCLTest).o:Chapter10(OpenCLTest).cpp:(.text+0x4dd): undefined reference to `_imp____glewBufferData' 
src\Chapter10(OpenCLTest).o:Chapter10(OpenCLTest).cpp:(.text+0x50b): undefined reference to `_imp____glewGetBufferParameteriv' 
src\Chapter10(OpenCLTest).o:Chapter10(OpenCLTest).cpp:(.text+0x1d67): undefined reference to `_imp____glewBindBuffer' 
src\Chapter10(OpenCLTest).o:Chapter10(OpenCLTest).cpp:(.text+0x1d7f): undefined reference to `_imp____glewDeleteBuffers' 
src\Chapter10(OpenCLTest).o:Chapter10(OpenCLTest).cpp:(.text+0x1d95): undefined reference to `_imp____glewBindBuffer' 
src\Chapter10(OpenCLTest).o:Chapter10(OpenCLTest).cpp:(.text+0x1dad): undefined reference to `_imp____glewDeleteBuffers' 
src\Chapter10(OpenCLTest).o:Chapter10(OpenCLTest).cpp:(.text+0x2078): undefined reference to `_imp____glewBindBuffer' 
collect2: ld returned 1 exit status 

Tốt nhất là giải quyết vấn đề này nhưng theo cách tôi muốn hỏi là có bất kỳ triển khai nào khác của gl extentl?

+1

Tôi e rằng bạn sẽ cần tìm các thư viện được biên dịch bằng g ++ hoặc tự xây dựng chúng. – Mat

+0

Bạn đang sử dụng trình biên dịch nào? Hệ điều hành nào? Tôi nghĩ rằng nó chỉ là một vấn đề để xác định trình biên dịch, nơi để tìm các tập tin lib (hoặc .so tùy thuộc vào hệ thống chúng ta đang nói về). Tôi sử dụng GLEW kể từ hơn một năm trên Linux Box của tôi và mọi thứ rất thẳng về phía trước. Làm ơn cho tôi biết. –

+0

MinGW (tiêu đề bài viết) Windows 7 – itun

Trả lời

0

Bạn có thể thử GLee về cơ bản thực hiện tương tự như GLEW.

5

Tôi e rằng bạn không thể sử dụng glew.lib với g ++ (vì .lib là định dạng Microsoft độc quyền). Những lỗi bạn nhận được là thiếu điểm nhập chức năng, có nghĩa là bạn không biên dịch GLEW đúng (các hàm bắt buộc không được xuất trong .so - cần biết thêm chi tiết để có thể giải quyết vấn đề này).

Đối với phần khác của câu hỏi, bạn có thể thử GLEH. Nó vẫn còn trong giai đoạn phát triển và có thể cần một số tinh chỉnh để làm việc cho bạn, nhưng chúng tôi đã sử dụng nó khá thành công trong linux vì vậy nó không nên quá xấu.

2

(Tôi biết điều này hơi trễ một chút, nhưng tôi nghĩ nó có thể giải quyết được vấn đề của người khác, vì vậy) Tôi đã có một vấn đề tương tự khi biên soạn một chương trình liên kết với GLEW động. Nó chỉ ra rằng tôi đã bỏ qua các tập tin libglew32.dll.a - cũng cần phải có mặt (ngoài libglew32.aglew32.dll mà trước đây tôi đã sao chép vào thư mục dự án của mình.)

+0

Tôi đã có cùng một vấn đề ngay bây giờ, giải quyết nó. Tôi nghi ngờ nó là giải pháp nhưng không háo hức về toàn bộ quá trình biên dịch lại. Dù sao, tải về nguồn, biên dịch với mingw (4.8) thực hiện, và sao chép nó để giống như .exe đã làm các trick - chỉ để tham khảo trong tương lai. –

0

Lạ lùng không ai nói gì về điều này. Theo mặc định trên Windows, tiêu đề GLEW sử dụng declspec(dllimport) cho tất cả các chức năng bên ngoài, mang theo tất cả tên của chúng. Đây là lý do tại sao tất cả các tên biểu tượng bên ngoài bị thiếu đều có _imp____ ở mặt trước.

Nếu bạn không sử dụng bản dựng GLEW tĩnh (bạn đã đề cập đến điều gì đó về libglew.a), hãy xác định GLEW_STATIC khi xây dựng GLEW và trong quá trình xây dựng ứng dụng của bạn. Điều này sẽ unmangle các tên cho liên kết tĩnh.

Nếu bạn muốn liên kết tới phiên bản thư viện được chia sẻ của GLEW, hãy đảm bảo tạo GLEW bằng GLEW_BUILD. Tôi không chắc chắn nếu điều này là cần thiết với gcc nhưng nó là nếu thư viện được xây dựng với MSVC.

Hơn nữa, chuỗi công cụ GNU thực sự hỗ trợ định dạng .lib của Microsoft để liên kết. source

Bạn có thể thấy dễ nhất là chỉ cần biên dịch GLEW cho mình hoặc thậm chí đưa nó vào dự án của bạn. Nó chỉ là một tệp nguồn và một vài tiêu đề. Để biên dịch thư viện theo cách thủ công, hãy sử dụng thứ gì đó dọc theo các dòng gcc -shared -o libGLEW.dll -Wl,--out-implib=libGLEW.dll.a -O2 -DGLEW_BUILD glew.c. Để có được phiên bản tĩnh sử dụng một cái gì đó như gcc -c -O2 -DGLEW_STATIC glew.c thay thế.

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