2012-06-16 28 views
12

Làm cách nào để biết thư viện đã được tạo bằng libC++ hay libstdC++ trên mac chưa?là một thư viện được xây dựng với libC++ hoặc libstdC++ trên Mac

tôi đã được sử dụng otool -L, nhưng điều này dường như không thể hiện điều đó (mac không có ldd)

Nếu tôi có thư viện X, tôi muốn biết nếu tôi phải xây dựng lại nó như tôi di chuyển từ GCC để kêu vang. Tôi đã xây dựng một số thư viện với GCC, thư viện mac thường được xây dựng với clang AFAIK.

Trả lời

3

Đối với thư viện động, otool -L sẽ hiển thị libstdc++ nếu thư viện được xây dựng dựa vào thư viện đó (ví dụ: nếu nó là C++).

Đối với thư viện tĩnh, câu hỏi không có ý nghĩa. Thư viện tĩnh không được xây dựng với các thư viện khác.

Và bạn không cần phải xây dựng lại bất cứ điều gì chỉ vì bạn đang thay đổi trình biên dịch. Chỉ có một thư viện C++ trên toàn hệ thống và nó có một ABI ổn định.

+0

Hmm - nhận xét của bạn về ABI dường như không chính xác về libC++ v libstdC++ - http://stackoverflow.com/a/8457799/1460739 – user1460739

+0

Vấn đề là ít thay đổi trình biên dịch, nhiều thay đổi thư viện chuẩn hơn. – user1460739

+1

Đó là câu hỏi khác về ai đó cụ thể biên dịch một chương trình bằng cách sử dụng một thư viện C++ được chỉ định nhưng liên kết với một thư viện không được biên dịch dựa vào cùng thư viện C++ đó. Nếu bạn chỉ cho phép trình biên dịch thực hiện điều đó mà không cần ghi đè nó, bạn sẽ nhận được thư viện stdC++ của hệ thống cho mọi thứ và nó hoạt động. Nếu bạn ghi đè lên nó, bạn phải ghi đè lên nó theo cùng một cách cho tất cả mọi thứ. –

8

thư viện tĩnh: nm -a helloworld.a | grep __1

Nếu bạn thấy dòng chứa __1, ví dụ __121__basic_string, sau đó thư viện được biên dịch bằng libC++. Tuy nhiên, nếu không có chữ ký hàm nào sử dụng các loại thư viện chuẩn C++ thì điều này có thể không hoạt động.

động thư viện: otool -L helloworld

Hãy tìm sự phụ thuộc vào libC++ hoặc libstdC++ dylib.

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