2011-12-13 39 views
54

Câu trả lời cho câu hỏi này Why can't clang with libc++ in c++0x mode link this boost::program_options example? nói rằng "Bạn cần phải xây dựng lại boost bằng cách sử dụng clang ++ -stdlib = libC++."Làm thế nào để biên dịch/liên kết Boost với clang ++/libC++?

Tôi đang sử dụng MacOS Lion với clang v3.0. Làm thế nào để xây dựng Boost v1.48.0 bằng cách sử dụng clang và liên kết nó với libC++?

Cập nhật: Tôi đã tạo một sử dụng config.jam tập tin như sau:

using clang-darwin 

... đó sẽ xây dựng Boost với kêu vang thay vì gcc. Làm cách nào để liên kết với libC++ thay vì libstdC++?

Trả lời

85

Tôi cũng không biết cách thực hiện điều này. Nhưng sau khi poking xung quanh here, và dùng thử và lỗi:

$ ./b2 clean 
$ ./b2 toolset=clang cxxflags="-stdlib=libc++" linkflags="-stdlib=libc++" 

Bạn sẽ nhận được rất nhiều cảnh báo. Và thư viện tín hiệu sẽ không xây dựng được do LWG 2059. Nhưng nếu không, tôi nghĩ rằng hoạt động.

+2

Vâng, nó hoạt động! Cảm ơn bạn. –

+0

Chỉ cần thêm, tăng :: signal2 ('#include ') có API tương tự để tăng :: tín hiệu và chỉ là tiêu đề, vì vậy không thể tạo tín hiệu có thể không quá tệ. –

+0

Có phải nó chỉ tăng :: tín hiệu không được xây dựng? Tôi nghĩ rằng tôi đang thiếu rất nhiều biến thể khi xây dựng hoàn thành –

15

Một lựa chọn khác là sử dụng Homebrew:

brew install boost --c++11 

Để có được thông tin về tất cả các tùy chọn sử dụng:

brew info boost 
+2

Liên kết này có chống lại 'libC++' thay vì 'libstdC++' không? –

+0

nếu clang có sẵn, nó liên kết với libC++. –

+1

Tôi chạy "brew install boost --C++ 11" theo sau là "otool -L /usr/local/Cellar/boost/1.57.0/lib/libboost_regex-mt.dylib" và có thể xác nhận rằng Boost hiện đang liên kết với libC++. Cảm ơn! –

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