我的 ARM-EABI 工具链和/或 libstdc++ 有问题。
当我编译和链接一个由文件 test.cpp、TestClass.cpp、TestClass.h 组成的简单 C++ 库时,一些展开的支持例程(如__cxa_begin_cleanup
从库中弱引用),
objdump -T
显示为
00000000 w D *UND* 00000000 __cxa_begin_cleanup
00000000 w D *UND* 00000000 __cxa_call_unexpected
__cxa_begin_cleanup
在 libsupc++ 中实现,与我们的库链接,但函数未链接到库中。为什么?
如果更改了库中的代码并std::string
使用了 a(在 test.cpp 的注释中准备),则该函数__cxa_begin_cleanup
将链接到生成的二进制文件并且objdump -T
不再显示它们。
这里有一个类似的问题,但是提到的链接器选项--start-group
并--end-group
没有帮助。
任何人都可以帮忙吗?
ARM-EABI 工具链包括: GCC 6.3.0 Binutils 2.27 Newlib 2.4.0
命令行:
arm-eabi-gcc.exe test.cpp TestClass.cpp -fPIC -O0 -lstdc++ -lsupc++ -o a.out
资源:
测试.cpp
#include <string>
#include "testclass.h"
int bur_heap_size = 0;
//std::string str1;
int fun ()
{
TestClass obj1;
// str1 = "blabla";
return 0;
}
测试类.cpp
#include "testclass.h"
TestClass::TestClass(){ public_member = 1;}
TestClass::~TestClass(){}
int TestClass::PublicMethodGetPublicMember(){ return public_member;}
测试类.h
#ifndef TESTCLASS_H_
#define TESTCLASS_H_
class TestClass
{
public:
TestClass();
~TestClass();
int PublicMethodGetPublicMember();
public:
int public_member;
};
#endif