Tôi nên sử dụng libc ++ hay libstdc ++? [đóng cửa]


91

Tôi đang phát triển các tệp thực thi giao diện dòng lệnh cho cả osx và linux bằng c / c ++. Dự án sẽ liên kết với opencv. Tôi nên sử dụng libc ++ hay libstdc ++?


1
Tôi không biết, nhưng bạn có thể thấy điều này đáng quan tâm: clang-developers.42468.n3.nabble.com/…
DarenW

3
Câu trả lời này có thể hữu ích.
Yantao Xie

2
nếu bạn liên kết với opencv, thì hãy sử dụng libstdc ++. đây là lý do tại sao stackoverflow.com/questions/13037659/…
Loozie

Câu trả lời:


89

Tôi sẽ sử dụng thư viện gốc cho mỗi hệ điều hành, tức là libstdc ++ trên GNU / Linux và libc ++ trên Mac OS X.

libc ++ không hoàn chỉnh 100% trên GNU / Linux và không có lợi thế thực sự để sử dụng nó khi libstdc ++ hoàn thiện hơn. Ngoài ra, nếu bạn muốn liên kết đến bất kỳ thư viện nào khác được viết bằng C ++, chúng gần như chắc chắn sẽ được xây dựng bằng libstdc ++, vì vậy bạn cũng cần phải liên kết với thư viện đó để sử dụng chúng.

Thông tin thêm tại đây về tính hoàn chỉnh của libc ++ trên các nền tảng khác nhau.


3
Bạn có thể giải thích / cung cấp liên kết về trạng thái hoàn chỉnh của libc ++ trên Linux không? Tôi không hiểu tại sao điều này sẽ dành riêng cho nền tảng vì libc ++ chỉ là một loạt các tiêu đề Thư viện chuẩn. Hay ý bạn là người ta cần xây dựng các thư viện thời gian chạy Clang wrt thành LLVM không được hỗ trợ tốt trên Linux?
TemplateRex

1
@TemplateRex, tôi không biết tình trạng hiện tại, bạn có thể xem trên libcxx.llvm.org . Tôi không theo dõi libc ++ vì vậy bạn đang hỏi nhầm người, nhưng bạn có đang gợi ý rằng "một loạt các tiêu đề Thư viện chuẩn" sẽ không bao giờ có bất kỳ mã nền tảng cụ thể nào không?
Jonathan Wakely

Vì bạn có thể cài đặt Linux trên khá nhiều phần cứng của Apple đang chạy Mac OS X, tôi tự hỏi sự phụ thuộc nền tảng trong tiêu đề C ++ sẽ đến từ đâu? Có thể một số trình bao bọc xung quanh bản chất của CPU nội bộ hoặc IO và những thứ xử lý ngoại lệ phụ thuộc vào hệ thống, nhưng sự hiểu biết của tôi là những thứ như vậy được xử lý trong loại librcxxrt của các lớp nhị phân. Không phải các tiêu đề của Thư viện Chuẩn được cho là có thể cắm được nhiều hay ít?
TemplateRex

4
Tôi không nói về phần cứng. Một lần nữa, tôi không biết gì về libc ++, nhưng hầu hết các thư viện tiêu chuẩn C ++ đều được triển khai trên thư viện C của hệ điều hành và ví dụ: ánh xạ từ std::ctype_base::maskgiá trị sang <ctype.h>hằng số hoàn toàn phụ thuộc vào nền tảng. (Bản chất của CPU được cung cấp bởi trình biên dịch, việc xử lý ngoại lệ được thực hiện bởi lớp ABI cấp thấp, nhưng IO thường được thực hiện hoàn toàn trong thư viện C ++ và C, không phải thứ cấp thấp).
Jonathan Wakely

1
@abergmeier, đó là một đối số không có thật, bởi vì (khi được sử dụng với GCC hoặc các quy trình biên dịch đủ điều kiện khác) libstdc ++ không áp đặt bất kỳ hạn chế nào đối với mã sử dụng nó, cho dù được liên kết động hay tĩnh. Nó không phải là LGPL. Xin đừng phát tán FUD. gcc.gnu.org/onlineocs/libstdc++/faq.html#faq.license.what
Jonathan Wakely

30

Các bản phân phối Linux chính không cung cấp LLVM libc ++, vì:

  1. Không giống như Apple và FreeBSD, GPL + 3 không phải là một vấn đề, vì vậy không cần phải triển khai một ngăn xếp khác ở đây.
  2. Các thành phần Linux đã được phát triển xung quanh GNU libstd ++ cho nhiều lứa tuổi. Một số người trong số họ không xây dựng trên bất kỳ thứ gì khác.
  3. Mặc dù libc ++ mạnh về các tính năng mới, nhưng nó có một số vấn đề với mã kế thừa.

Nếu cuối cùng libc ++ trở thành một phần của các bản phân phối, nó sẽ là một thành phần tùy chọn. liên kết chống lại nó có thể sẽ yêu cầu các tùy chọn bổ sung.

Giống như Jonathan đã nói, bạn nên sử dụng bất kỳ công cụ nào được bao gồm theo mặc định. Clang an toàn trong Linux để sử dụng vì được định cấu hình như một sự thay thế GCC, vì vậy về khía cạnh đó, bạn không phải lo lắng về 2 trình biên dịch. Ngoài ra, vì bạn đang nhắm mục tiêu hai nền tảng, bạn nên xem xét cmake.


2
Clang không phải là sự thay thế GCC ... Chỉ là một trình biên dịch khác.
Isaac Pascual

4
@IsaacPascual Ý của Mario là clang chính thức có mục tiêu thiết kế là trở thành một phần mềm thay thế cho trình biên dịch nổi bật trên nền tảng bạn chạy nó (ví dụ: gcc khi chạy trên linux). Tương tự đối với trình biên dịch của intel afaik. Đó là cách của họ để có được sự chấp nhận rộng rãi hơn.
Johan Boulé
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.