2009-10-31 41 views
13

Tôi đang làm việc trên một dự án nhúng hiện đang sử dụng C trong Linux và uClibc. Chúng tôi quan tâm đến việc chuyển nó sang C++, nhưng tôi không muốn chi phí liên quan đến việc liên kết trong libstdC++. Ấn tượng của tôi là điều này có thể được cung cấp, chúng tôi không sử dụng bất cứ thứ gì từ STL, chẳng hạn như iostream hoặc véc tơ.Tránh liên kết tới libstdC++

Làm cách nào để trực tiếp g ++ biên dịch mà không liên kết với libstdC++?

Trả lời

10

Khi bạn biên dịch, hãy sử dụng g++ -c để chỉ biên dịch. Sau đó để liên kết, hãy sử dụng ld thay vì g++. Điều này gọi trực tiếp trình liên kết, yêu cầu bạn đặt tên cho tất cả các thư viện của bạn trên dòng lệnh (bao gồm cả libc và libcrt).

Ngoài ra, nếu bạn đang sử dụng g ++ như là một "tốt hơn c", bạn có thể sử dụng gcc cho bước liên kết cuối cùng của bạn (mà sẽ bao gồm libc tự động)

+0

Khi tôi thử điều này, tôi nhận được "tham chiếu không xác định đối với' __gxx_personality_v0 '"khi cố gắng liên kết. – Brian

+0

Tôi nghĩ điều đó có nghĩa là bạn đang sử dụng một số tính năng cụ thể của C++. Tính năng đó là gì, tôi không chắc chắn. –

+0

Được rồi, tôi đã làm việc đó bằng cách tham khảo this question. Bạn phải biên dịch với "g ++ -fno-exceptions -c" và sau đó liên kết riêng. – Brian

9

Bạn có thể sử dụng

g++ -nodefaultlibs -fno-exceptions a.cc 

Nhưng bạn không thể sử dụng tất cả C++ tính năng theo cách này ...

2

Vì lợi ích của sự hoàn chỉnh và đúng đắn:

g++ -c -fno-exceptions a.cpp 
gcc a.o -o a 
Các vấn đề liên quan