2012-03-29 63 views
6

Tôi có một đoạn mã được viết bằng C++ 11, mà tôi muốn biên dịch như một phần của tệp MATLAB MEX cho GNU/Linux.Biên dịch mã C++ 11 như một phần của tệp mLAB MATLAB

Vấn đề là MATLAB trên Linux chỉ hỗ trợ GCC 4.3 (và trước đó) và không hỗ trợ GCC 4.7 cần để biên dịch mã C++ 11 của tôi.

Có thể khắc phục sự cố không?

Có thể giải quyết vấn đề này bằng cách biên dịch một số tệp đối tượng bằng GCC 4.7 và liên kết chúng vào tệp MEX bằng GCC 4.3 không?

Cảm ơn trước!

+0

Bạn có ý gì khi không được hỗ trợ? Trong các tệp mex cuối chỉ là các thư viện được chia sẻ với giao diện C đơn giản. Vì vậy, bạn có thể phải biên dịch nó theo cách thủ công và có thể phải chỉnh sửa một số tiêu đề nhưng bạn sẽ có thể làm cho nó hoạt động. – Trass3r

+0

Vui lòng xem câu trả lời này: http://stackoverflow.com/questions/25648949/error-when-compiling-c11-code-in-a-matlab-mex-file#25649348. Về cơ bản, thêm -std = C++ 11 vào CFLAGS được định nghĩa trong mexopts.sh hoạt động tốt. – efx

Trả lời

5

Nếu bạn có thể viết bất kỳ mã nào trong phần mở rộng 4.3 của bạn và biên dịch nó, thì chỉ cần viết mã để dlopen một đối tượng dùng chung mà bạn đã viết và biên dịch trong 4.7. Sử dụng 4.7 .so để làm tất cả công việc C++ 11 của bạn, và chỉ cần chuyển thông tin của bạn đến nó thông qua giao diện C. Các 4.3 extionsion bạn viết có thể truy cập tất cả các công cụ interop MATLAB.

Bạn cũng có thể làm điều này theo nhiều cách khác nhau, nhưng đây là cách tốt nhất. Bạn không nên thử liên kết một tệp đối tượng với phần mở rộng 4.3 của bạn, vì bạn sẽ truy cập hai phiên bản khác nhau của thư viện chuẩn (hoàn toàn khác), và bạn không thể có nhiều defnitions của cùng một lớp với bố trí/phương thức/etc khác nhau . Bạn sẽ chiến đấu với One Definition Rule (ODR) của C++.

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