2013-07-29 32 views
9

Chỉnh sửa/Cập nhật/Ghi chú: Chỉ cần để clang sử dụng libstdC++. Đã làm việc thực sự tốt cho tôi cho đến nay.Cách bị xử phạt để xây dựng libC++ cho clang trên Linux là gì?

===============================

Trước đây tôi đã có thể thành công bằng cách thực hiện một cái gì đó với cmake, nhưng bây giờ tôi đã phát hiện ra một tập lệnh buildit bên trong thư mục lib của cây dự án http://llvm.org/svn/llvm-project/libcxx/trunk.

Kịch bản buildit này dường như không sử dụng libsupc++ đó là cách tiếp cận cmake mà tôi đã sử dụng trước đó. Ví dụ: this guide hiển thị một cmake câu thần chú để tạo một makefile cho libc++, có thể quản lý việc biên dịch và cài đặt.

Câu hỏi của tôi là sự khác nhau giữa các cách khác nhau để sản xuất LLVM-libc++ và loại nào nên được sử dụng? Họ sẽ hành xử khác nhau?

Tập lệnh buildit dường như không hỗ trợ cài đặt. Có hướng dẫn nào để cài đặt thư viện đúng cách không? Với libC++ trước đây của tôi được xây dựng với cmake, tôi phải luôn thêm -lc++ vào các cờ liên kết (và đường dẫn có -L), điều này không cần thiết trong các tệp makefiles OS X của tôi.

+0

Tôi đọc thêm một chút về 'libsupC++', và dường như nó là tập con của 'libC++' của GCC. Kịch bản 'buildit' xuất hiện để liên kết' libC++ ', vì vậy tôi đoán không có gì đáng ngạc nhiên ở đây, và có lẽ tôi chỉ cần tinh chỉnh một số cờ' cmake' để có được cài đặt hợp lý hơn. Tuy nhiên, tôi sẽ đánh giá cao một số giải thích chung của một người biết nhiều hơn tôi làm về LLVM. –

+0

nghĩa là 'libsupC++' cung cấp một số chức năng liên quan đến ABI (và khác) cho 'libstdC++' của GCC. – rubenvb

Trả lời

3

libc++ website có tổng quan tốt đẹp về các cách có thể để xây dựng libC++.

Tôi khuyên bạn nên sử dụng CMake + libc++abi.

Xem thêm Arch Linux User Repository build script, sử dụng tập lệnh buildit. Tôi đã cài đặt libC++ từ đó và sử dụng nó với gói Arch Linux Clang thành công bằng cách sử dụng

clang++ -std=c++11 -stdlib=libc++ -lc++abi 
+3

Vâng, tôi đang trên CentOS 6.4 mà làm cho nó hơi khó hơn bình thường để có được công cụ làm việc vì nhiều mục là .... cũ. Tôi đã bao gồm các đường dẫn bổ sung '/ usr/include/C++/4.4.4;/usr/include/C++/4.4.4/x86_64-redhat-linux' ngoài các thư mục 4.4.7, và cũng sao chép' cxxabi -forced.h' (được đặt trong '4.4.4 /') thành 'bits/cxxabi_forced.h', trước khi lệnh' cmake' thành công. Điều này là quá đau đớn! Điều này sẽ đi trong init script máy của tôi, vì vậy tôi sẽ ổn trong một thời gian ngắn. Nhưng ai đó cần phải nghĩ ra điều gì đó ít đau đớn hơn vì đây là 'cmake' không làm công việc duy nhất của mình. –

+1

Tôi cũng phải thay đổi 'cxxabi.h' thành' # include' từ 'cxxabi-forced.h' thành' bits/cxxabi_forced.h' để lấy libC++. Do đó 'make' gọi thành công. –

+1

Điều này không còn hoạt động (với SVN libC++). Vì vậy, bất kỳ nỗ lực nào để biên dịch với '-std = C++ 0x -stdlib = libC++' dẫn đến một tham chiếu 'undefined bí ẩn thành \' vtable cho std :: nested_exception'' –

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