c++ - OSX C++ 导出函数

标签 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++ 方面有点新手,非常感谢任何见解或帮助,谢谢。

最佳答案

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

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

visibility 属性只有在构建共享库时才有意义。您可能不需要它。

关于c++ - OSX C++ 导出函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28198425/

相关文章:

c++ - 使库可从 GO 中的其他语言使用

java - 如何使用 Mac 在 netbeans 中打开 .txt 文件?

bash - OSX 终端在启动时无法识别 ~/.bashrc 和 ~/.bash_profile

swift/Xcode : WebProcessProxy Invalid connection identifier (web process failed to launch)

linux - "locale"在 Mac OS X 和/或其他 Unix/Linux 操作系统上究竟做了什么

c++ - OpenSSL:RSA 加密/解密、 key 生成和 key 持久性

委托(delegate)构造函数中的 C++ 大括号括起来的初始值设定项列表

c++ - 返回原始值的快速排序实现

c++ - 系统调用成本

android - OS X 10.9 升级后 Android Studio 项目出现问题,cacerts 出错