我正在我的库(GCC 4.4.4-14 ubuntu 5.1)上编译一个 c 接口(interface),它基本上看起来像这样
标题
extern "C"
{
int foo()
}
实现
int foo()
{}
int bar() __attribute__((alias ("foo")));
编译正常,但是当我将共享对象链接到测试应用程序并尝试调用 bar() 时,函数无法识别。
我尝试将别名行从实现移动到 header ,然后出现编译器错误:
bar() aliased to undefined symbol foo
为什么将别名移动到 header 会导致此错误?请问我该如何让它全部工作?
最佳答案
除了上面booiljoung的回答,你还可以从gcc site找到以下信息有用:
别名(“目标”) alias 属性导致声明作为另一个符号的别名发出,必须指定。例如, void f () {/* 做点什么。 */; } void f() _属性((weak, alias ("_f")));
将 f' 定义为
_f' 的弱别名。在 C++ 中,必须使用目标的错位名称。 如果`_f'没有定义在同一个翻译单元中是错误的。
并非所有目标机器都支持此属性。
关于c++ - 在 Linux 上的 C++ 应用程序中的 C 接口(interface)上为函数别名,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10802324/