从共享库显式导出函数时,是否有Linux等效的__declspec(dllexport)符号?由于某种原因,在我使用的工具链中,非类成员的函数不会出现在生成的共享库文件中.

推荐答案

__attribute__((visibility("default")))

据我所知,没有__declspec(dllimport)英镑的类似功能.

#if defined(_MSC_VER)
    //  Microsoft 
    #define EXPORT __declspec(dllexport)
    #define IMPORT __declspec(dllimport)
#elif defined(__GNUC__)
    //  GCC
    #define EXPORT __attribute__((visibility("default")))
    #define IMPORT
#else
    //  do nothing and hope for the best?
    #define EXPORT
    #define IMPORT
    #pragma warning Unknown dynamic link import/export semantics.
#endif

典型用法是根据库当前是否正在编译,有条件地将MY_LIB_PUBLIC等符号定义为EXPORTIMPORT:

#if MY_LIB_COMPILING
#   define MY_LIB_PUBLIC EXPORT
#else
#   define MY_LIB_PUBLIC IMPORT
#endif

要使用它,您可以这样标记函数和类:

MY_LIB_PUBLIC void foo();

class MY_LIB_PUBLIC some_type
{
    // ...
};

Linux相关问答推荐

C++17:G++8.5版似乎无法正确生成无符号64位伪随机整数

如何将netcdf文件列表中的特定变量添加到不同的文件中?

为什么我在退出SD-Bus容器时出现错误?

记录终端输入和输出的 Bash 脚本

构建 python 映像时 Docker compose 问题,访问被拒绝或存储库不存在

sed 根据文件中的条件进行多次替换

如何让 Flutter 用鼠标拖动而不是滚轮滚动? (Linux)

有没有办法定义自定义隐式 GNU Make 规则?

问题:Virtio rpmsg 总线 virtio0:收到的 msg 没有收件人 - 在 Yocto Hardknott - imx7d-pico

如何重新安装最新的 cmake 版本?

Stripping linux 共享库

我在哪里放置第三方库来设置 C++ Linux 开发环境?

如何使用不同的出口 IP 一次运行多个 Tor 进程?

在 Linux/POSIX 系统上获取用户全名的最简单方法是什么?

我可以在 Ubuntu 上使用 Homebrew 吗?

试运行 cron 条目

从bash中的字符串中删除所有特殊字符和大小写

os.walk 没有隐藏文件夹

在 PHP / Apache / Linux 环境中,为什么 chmod 777 是危险的?

Linux shell 中的排序和唯一性