这样做是可行的:
test1.h
namespace funcs {
extern "C" {
void a();
void b();
void c();
}
}test1.cpp
namespace funcs {
void (*all[])() = {a, b, c};
}
extern "C" void hang() {
while (true);
}
#pragma weak a = hang
#pragma weak b = hang
#pragma weak c = hang但这并不是:
test1.h
namespace funcs {
void a();
void b();
void c();
}test1.cpp
namespace funcs {
void (*all[])() = {a, b, c};
}
void hang() {
while (true);
}
#pragma weak funcs::a = hang
#pragma weak funcs::b = hang
#pragma weak funcs::c = hang我认为这是因为#pragma weak需要破烂的名字。有没有办法让编译器(GCC 4.7.3)为我发出破损的名字?
发布于 2013-01-22 06:17:33
在g++中没有稳定的分解方法,原因是,即使在不同的g++版本之间,故障规则也是不可移植的。
另外,#pragma weak是C扩展名(在gcc/c-family/c-pragma.c文件中声明),通常不使用C++
就GCC的发展而言,正确的解决方案是为类似于#pragma cpp-weak的东西提供代码,并将其提交gcc,但这似乎是一项相当复杂的任务。你可以在GCC提出一个改进的要求,布奇拉,也许有人会帮忙。
您还可能希望自己为C++函数声明汇编程序标签,并对它们进行弱引用,例如:
namespace funcs {
void a() __asm__("mya");
void b() __asm__("myb");
void c() __asm__("myc");
}
namespace funcs {
void (*all[])() = {a, b, c};
}
extern void hang() __asm__("myhang");
void hang() {
while (true);
}
#pragma weak mya = myhang
#pragma weak myb = myhang
#pragma weak myc = myhang但我不确定,这对你更好,然后是“外C”规范。
https://stackoverflow.com/questions/14443336
复制相似问题