2012-02-07 39 views
13

Có thể phát triển C/C++ trên Windows bằng Visual Studio 2010 (không nhất thiết là trình biên dịch MSVC) và nhận một nhị phân mà tôi có thể tải lên máy linux (và chạy nó) ? Về khả năng tôi đã kiểm tra là sử dụng MinGW hoặc một cái gì đó tương tự để có được cửa sổ nhị phân làm điều tương tự mà binaries Linux sẽ làm nhưng tôi đã có vấn đề để có được tất cả các win-port cho tất cả các thư viện cần thiết (posix).Làm thế nào để biên dịch trong Visual Studio 2010 cho Linux

EDIT: Tôi không muốn để cửa sổ nhị phân chạy trên Linux. Tôi cần một bản nhị phân Linux nguyên bản.

+2

Có, bạn có thể. Bạn chỉ cần tìm (hoặc viết cho mình) các nhiệm vụ xây dựng tùy chỉnh để gọi trình biên dịch chéo của bạn. Ngoài ra, bạn phải tìm (hoặc tự xây dựng) một trình biên dịch chéo. Cả hai bước này đều không dễ dàng để làm cho bản thân bạn, nhưng nếu bạn có kiên nhẫn để làm cho họ, họ là khá khả thi (tôi đã làm cả hai; nó mất một vài tuần, tổng số). Tuy nhiên, nếu bạn đang xây dựng phần mềm cho Linux, sẽ dễ dàng hơn khi biên dịch nó trên Linux. –

+0

Bạn muốn sử dụng những tính năng nào của IDE, ngoài trình chỉnh sửa và khả năng loại bỏ và chạy 'make'? –

+0

@James: Bạn sẽ đề xuất trình biên dịch chéo nào? – schoetbi

Trả lời

15

Nhờ tất cả các bạn! Giải pháp của tôi được tóm tắt:

  1. đang Nền tảng độc lập được phát triển sử dụng Visual Studio
  2. xây dựng cuối cùng (đối với Linux) được thực hiện bằng cách sử dụng Virtual Box chạy Debian hoặc RHEL
  3. IDE trong Virtual Box là Eclipse với plugin CDT
  4. Sử dụng CMake để tạo các tập tin dự án cho cả Visual Studio và Eclipse CMake
+0

Xin chào. Có lẽ, chủ đề là cũ, nhưng tôi có thể yêu cầu bạn đưa thêm chi tiết về giải pháp của bạn không? Ví dụ: "Mã độc lập nền tảng được phát triển" là gì. Có lẽ tôi có cùng một vấn đề bây giờ như bạn 4 năm trước đây. Hy vọng thay đổi công nghệ cũng đã thay đổi một cái gì đó trong công việc của bạn. Tôi mơ ước sử dụng một codebase cho các nền tảng khác nhau. – Michail

+0

Điều đó có nghĩa là bạn cần một lớp trừu tượng hệ điều hành. Bạn có thể sử dụng một cái hiện có, hoặc đóng gói từng cuộc gọi hệ điều hành bạn cần trong một hàm bao bọc. Có thể bạn nhìn vào [POCO C++] (http://pocoproject.org/) – schoetbi

0

Không, tôi không nghĩ rằng bạn có thể biên dịch chéo nhắm mục tiêu Linux/x86 bằng trình biên dịch phòng thu trực quan.

(Tôi không biết Windows, nhưng tôi nghe nói rằng Microsoft không phải là rất thân thiện với Linux và không phát triển qua các trình biên dịch)

Cách đơn giản nhất để bạn có thể biên dịch mã của bạn cho Linux/x86 là cài đặt một bản phân phối Linux hoàn chỉnh (trên máy tính xách tay của bạn, hoặc có lẽ trong một máy ảo).

Bạn có thể biên dịch (cho Windows host) GCC và binutils để có được một trình biên dịch chéo targetting Linux/x86 và chạy trên Windows, nhưng tôi sẽ không đề nghị với một newbie.

(Nếu bạn có toàn bộ nhóm chỉ biết Windows, bạn cần phải dành nhiều tài nguyên để cho nhóm nghiên cứu tìm hiểu Linux và điều này dễ dàng hơn nếu mỗi nhà phát triển có hệ thống Linux trên máy tính để bàn của mình. và có một số chi phí, và hầu hết các nỗ lực sẽ được dành cho việc học lập trình dưới Linux, ví dụ như các cuộc gọi hệ thống Linux và các thư viện và API thông thường; vì vậy việc giữ Visual sẽ không giành được nhiều tiền và chi phí cho bạn!)

+0

Như tôi đã nói, tôi không cần phải sử dụng MSVC. Có một dự án mà allrady quản lý để có được một cross-toolchain? – schoetbi

+1

Tôi không sử dụng Windows, vì vậy tôi không phải là người tốt nhất để hỏi. Tuy nhiên, tôi không bao giờ nghe nói về một cross-toolchain phân phối rộng rãi trong hình thức nhị phân đóng gói cho Windows. ** Tôi khuyên bạn nên cài đặt Linux ** trên máy tính của bạn (bạn có thể cài đặt nó trên một phân vùng đĩa riêng biệt -it sẽ cùng tồn tại với Windows và bạn sẽ chọn thời gian khởi động mà OS khởi động, hoặc trong một máy ảo). –

3

tôi có một số ý kiến ​​về vấn đề này, nhưng rất khó để cân nhắc trong mà không cần biết thêm thông tin. Tại sao nó mà bạn muốn phát triển trong Visual Studio? Bạn đang nhắm mục tiêu loại ứng dụng nào? Có một mức độ trưởng thành mã đã tồn tại? Có vấn đề trải nghiệm nhóm nào ảnh hưởng đến quyết định này không?

Phản ứng đầu gối của tôi là có vẻ như bạn muốn những lợi ích của môi trường phát triển VS 2010 về năng suất của nhà phát triển trong khi phát triển một ứng dụng được sử dụng trong môi trường Linux. Nếu tôi phải đối mặt với điều đó, có lẽ tôi đang nhắm mục tiêu C# di động bằng cách sử dụng mono trên máy chủ tích hợp liên tục dựa trên Linux với các lần đăng ký ngắn hạn (một lần hoặc hơn một giờ) để loại bỏ mã không di động . Tuy nhiên bạn đã chỉ định C++, do đó, có lẽ không hoàn toàn phù hợp với bạn, giả sử đó là một yêu cầu.

Với C++ là một yêu cầu khó, và Visual Studio là một yêu cầu khó, kế hoạch bạn đã đăng có vẻ như là một yêu cầu tốt.Ngoài ra, tôi chắc chắn sẽ muốn một máy chủ tích hợp liên tục chạy trên nền tảng đích với các đăng ký ngắn hạn để ngăn chặn bất kỳ sự phát triển mã quan trọng nào của mã không di động. TFS có thể xử lý điều này nếu bạn có giấy phép MSDN (và cung cấp tích hợp công cụ trong cả Visual Studio và Eclipse). Có rất nhiều lựa chọn tốt khác, nhưng bạn dường như được rút ra đối với ngăn xếp của Microsoft.

+0

+1 cho điều này. Vấn đề là chúng tôi muốn phát triển một ứng dụng thời gian thực (đó là lý do tại sao C# không phải là một lựa chọn). TFS là không cần thiết vì chúng tôi sử dụng SVN/Jenkins với repo git địa phương cho mỗi nhà phát triển. Kiểm thử tích hợp là tốt. Jenkins cũng có thể kích hoạt một máy ảo để kiểm tra phần mềm, ví dụ: nền tảng Linux. Cảm ơn. – schoetbi

+0

Nền tảng mục tiêu của bạn là Redhawk? Điều này bắt đầu giống như công việc ban ngày của tôi. Khi tôi nói tích hợp liên tục, tôi có các devs thực hiện các thay đổi nhỏ và kiểm tra trong khoảng một giờ một lần (hoặc thường xuyên hơn) và việc check-in đó khởi động một bản dựng hoàn toàn tự động của sản phẩm, thông báo cho dev ngay lập tức nếu build đó thất bại. Tôi không quen với Jenkins, có lẽ nó cung cấp khả năng này. Tốt hơn là mỗi mod mã được đặt trước bởi một trường hợp thử nghiệm, nhưng đó là chủ đề không chính xác. – PatrickV

+0

Không, tôi không biết Redhawk. CI: Đó chính xác là những gì Jenkins có thể làm cho bạn. http://jenkins-ci.org/ – schoetbi

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