Может быть, этот ответ слишком поздно, но ...
Написание программ на c ++ без libstdc ++ - это просто.Я делаю это десятилетиями.Просто избегайте ссылок на libstdc ++.Это просто: либо используйте gcc для компоновки вместо g ++, либо предоставьте поддельный libstdc ++ только с новыми, del и несколькими другими функциями.
Вот пример того, как вы можете заменить базовую функциональность libstdc ++ прозрачной оболочкой вокругmalloc:
#include <stdlib.h>
// MSVC uses __cdecl calling convention for new/delete :-O
#ifdef _MSC_VER
# define NEWDEL_CALL __cdecl
#else
# define NEWDEL_CALL
#endif
extern "C" void __cxa_pure_virtual ()
{
abort ();
}
void * NEWDEL_CALL operator new (size_t size)
{
return malloc (size);
}
void * NEWDEL_CALL operator new [] (size_t size)
{
return malloc (size);
}
void NEWDEL_CALL operator delete (void *p)
{
if (p) free (p);
}
void NEWDEL_CALL operator delete [] (void *p)
{
if (p) free (p);
}
void NEWDEL_CALL operator delete (void *p, size_t)
{
if (p) free (p);
}
Теперь поместите это в файл с именем, скажем, libstd -. cpp, и создайте свой собственный libstdc ++. a:
gcc -c -O libstdc--.cpp
ar crs libstdc++.a libstdc--.o
Затем вы можете попробовать простойtest:
class A
{
int *x;
public:
A () { x = new int [10]; }
~A () { delete [] x; }
};
int main ()
{
A a;
return 0;
}
Скомпилируйте и посмотрите, что связано:
g ++ -g test.cpp -o test -L.
# ldd ./test
linux-vdso.so.1 (0x00007ffed0b8d000)
libm.so.6 => /lib64/libm.so.6 (0x00007f4d18df0000)
libgcc_s.so.1 => /lib64/libgcc_s.so.1 (0x00007f4d18bd9000)
libc.so.6 => /lib64/libc.so.6 (0x00007f4d18823000)
/lib64/ld-linux-x86-64.so.2 (0x00007f4d1913b000)
Эй, смотри, ма, no libstdc ++!
В качестве альтернативы вы можете избежать использования поддельного libstdc ++, связываясь с gcc вместо g ++ и предоставляя libstdc -. o в командной строке компоновщика, чтобы ваш код мог найти новости о замене.и удаляет.