gcc支持c++的创建和删除自由内存的“new
时间:2006-07-19 来源:paniven
gcc支持c++的创建和删除自由内存的“new"和”delete"运算符吗?
问题: |
在build我的程序时,出现以下错误: arm-elf-ld -EL -T..\..\..\targets\at91\targets\ldscript -L..\..\..\Build\xgcc-arm- elf\arm-elf\lib\arm-inter -LD:\EmbestIDE\Build\xgcc-arm-elf\lib\gcc-lib\arm-elf\3.0.2\arm-inter - o.\debug\simple_iden0.elf .\debug\cstartup.o .\debug\simple_iden0.o ..\..\..\Targets\at91\drivers\lib_drv\arm- inter\lib_drv_32.lib ..\..\..\Targets\at91\parts\r40807\arm-inter\r40807_lib32.lib -lm -lc -lgcc .\debug\simple_iden0.o: In function `Initialization()": .\debug\simple_iden0.o(.text+0x634): undefined reference to `operator new[] (unsigned long)" .\debug\simple_iden0.o: In function `Empty()": .\debug\simple_iden0.o(.text+0x6bc): undefined reference to `operator delete[] (void*)" .\debug\simple_iden0.o(.text+0x718): undefined reference to `operator delete[] (void*)" 出错行是: void Initialization() { cat=new Star_Catalogue[MAX_CAT_NUM]; ... ... void Empty() { delete[] cat; for(int i=0;i delete[] guide_cat_info.m_guide_cat[i]; } 请问gcc支持c++这种格式吗? GNU链接器几个开关项的顺序我是这样排的:-lm -lc -lgcc,应该没错吧 |
回答: |
添加-lstdc++开关选项,这是连接C++语法支持所需要的。 |
在keil for Arm中,在link中添加-lstdc++开关选项,即可使用new和delete运算符
不过自己也可重载这2个运算符,注意必须在cpp文件中!!!
//
void * operator new (size_t size)
{
void * ptr;
ptr = (void *)malloc(size);
if (!ptr) return ptr;
memset(ptr, '\0', size);
return ptr;
}
void operator delete(void * obj)
{
free(obj);
}
//
相关阅读 更多 +