Tôi đang thử một thứ gì đó ma quái ở đây. Tôi đang cố gắng viết các chương trình C++, được biên dịch bằng g ++ của GNU, nhưng không có sự phụ thuộc vào libstdC++ :) nhưng có vẻ như tôi cần điều đó ngay cả những thứ cơ bản nhất cần nó.g ++ mà không cần libstdC++ - có thể thực hiện được không? - một libstdC++ có thể cấu hình rất nhẹ, nơi tôi có thể lấy ra một cách dễ dàng cũng sẽ thực hiện thủ thuật
Một libstdC++ với bộ tính năng có thể định cấu hình sẽ được chấp nhận.
Lệnh tôi sử dụng là
g++ -nodefaultlibs -fno-rtti -fno-exceptions -lc
Without libstdC++, tôi nhận được:
undefined reference to `operator delete(void*)'
undefined reference to `operator new(unsigned int)'
undefined reference to `vtable for __cxxabiv1::__class_type_info'
undefined reference to `vtable for __cxxabiv1::__si_class_type_info'
undefined reference to `__cxa_pure_virtual'
Đây không phải là trong libc, như vậy là có một libstdc thực sự ánh sáng ++ mà thực hiện chỉ những điều này?
mã kiểm tra của tôi mà tôi muốn xây dựng theo cách này hiện trông như thế này:
#include <stdio.h>
template <class T>
class X
{
public:
T a;
};
class A1
{
public:
virtual void f() = 0;
virtual ~A1() {}
};
class A2 : public A1
{
public:
virtual void f() {};
virtual ~A2() {}
};
class Y
{
public:
~Y() {}
};
int main()
{
X<int> A;
X<float> B;
Y *C = new Y;
A.a = 12;
B.a = 2.3;
printf("A: %d; B: %f\n", A.a, B.a);
A2 *a2 = new A2;
a2->f();
return 0;
}
Nếu bạn có thể giới hạn mình thành malloc/miễn phí, bạn có thể cắt giảm ngay cả những phụ thuộc đó. Điều đó nói rằng, không chắc chắn những gì mục tiêu của bạn ở đây là ở nơi đầu tiên. –
biên dịch nhị phân tĩnh? – Anycorn
Nó không rõ ràng với tôi tại sao libc là ok nhưng không libstdC++, nếu đó thực sự là trường hợp, chỉ cần viết trong C, bạn sẽ có ít đau đầu hơn cố gắng sử dụng một tập hợp con tê liệt tùy ý của C + +. –