【发布时间】:2010-09-15 01:57:50
【问题描述】:
我在这里尝试一些令人毛骨悚然的东西。我正在尝试编写使用 GNU 的 g++ 编译的 C++ 程序,但不依赖于 libstdc++ :) 但似乎我需要它,即使是最基本的东西也需要它。
具有可配置功能集的 libstdc++ 是可以接受的。
我使用的命令是
g++ -nodefaultlibs -fno-rtti -fno-exceptions -lc
没有 libstdc++,我得到:
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'
这些不在 libc 中,那么是否有一个真正轻量级的 libstdc++ 可以实现这些东西?
我想以这种方式构建的测试代码目前如下所示:
#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;
}
【问题讨论】:
-
如果您可以限制自己使用 malloc/free,您甚至可以删除这些依赖项。也就是说,首先不确定您的目标是什么。
-
我不清楚为什么 libc 可以,但 libstdc++ 不行,如果真的是这样,只需用 C 语言编写,与尝试使用任意残缺的 C++ 子集相比,您会更头疼。
-
libc 非常稳定,您通常不必担心依赖关系; libstd++ 更少。如果您在各种机器上发布 C++ 应用程序,这可能会成为一个问题。我认为您不能完全避免链接 libstd++;它需要诸如用于调用全局 ctor 的启动逻辑之类的东西。
-
@aaa carp 出于空间限制的原因,我实际上正试图摆脱 libstdc++
-
这篇文章 (wiki.osdev.org/C%2B%2B_Bare_Bones) 提供了一些关于在内核环境中使用没有运行时支持的 C++ 的信息,或者更准确地说是让您开始编写自己的运行时支持,以及这篇文章 (wiki.osdev.org/C%2B%2B)剩下的。这是非常低级的,但也许会有用。