OSX C ++导出功能

时间:2015-01-28 17:19:44

标签: c++ macos

我有一个在OSX上使用makefile的大型C ++项目。我只想添加一个我可以解析的导出函数。项目需要是可执行的而不是库。它已经导出了很多函数,但我无法使我的导出工作,这意味着当我在二进制文件上运行nm时它不可见。

我试着简单地将它添加到标题.h

#define EXPORT __attribute__((visibility("default")))
EXPORT int callme(int test);

我也尝试在标题中声明它,如

EXPORT int callme(int test) {return 0;}

然后我得到了一堆已存在于其他目标文件中的符号错误。

编辑:这是一个简单的C函数,我也试过

 #if !defined(__cplusplus)
 #define MONExternC extern
 #else
 #define MONExternC extern "C"
 #endif

 MONExternC int callme (int test);

对于C ++,我有点新手,非常感谢任何见解或帮助,谢谢。

1 个答案:

答案 0 :(得分:1)

您已经定义了(不仅仅是声明)标题中的独立非成员非模板非内联函数。这正是你不应该做的事情。它会导致您描述的那种错误,并且被标准禁止。

标题中应该只有一个函数ptototype。将其定义移动到恰好一个源文件。

可见性属性仅在构建共享库时才有意义。你可能不需要它。