c++ - 在 Linux 上的 C++ 应用程序中的 C 接口(interface)上为函数别名

标签 c++ c linux interface alias

我正在我的库(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/

相关文章:

c++ - #define inside an enum 或如何扩展枚举

c - 如何使用 GDB 输入文件进行多输入

linux - 如何做差异的反面?

linux - 目录大小奇怪。尺寸过大

c++ - Long double 不打印为我用它初始化的常量

c++ - 将结构向前声明为类时出现 Visual C++ 2015 链接器错误

c - C中临时对象的有效类型

xml - 使用sed有条件地删除xml文件中的行

python - 如何将多条曲线拟合到单个数据散点图?

c - 将结构放入共享内存