GCC 相当于 /INCLUDE Visual Studio 选项

GCC equivalent to /INCLUDE Visual Studio option

在 Visual Studio 中,我可以使用 /INCLUDE (Force Symbol References) 链接器选项从 dll 中导出特定符号。 GCC 中是否有等效选项?

我正在使用 -fvisibility=hidden 进行编译,因此默认情况下不导出任何符号。

一种方法是使用 __attribute__:

void foo() __attribute__((visibility("default")));

void foo() {
  /* Implementation */
}

这应该仅覆盖此函数的 -fvisibility=hidden 参数。您也可以这样做:

class __attribute__((visibility("default"))) my_class {
  public:
    myClass();
    ~myClass();

    // Other declarations...
};

这将导出整个 class 和其中包含的所有声明。

虽然符号可见性可能有效,但这并不是所问问题的完全答案。它不是链接器选项,需要修改源代码,这可能是不受欢迎的。或多或少等效于导出映射,但它仅适用于带有 GNU 链接器的 GCC。 GCC 命令行选项为

 -Wl,--version-script=a.map

和a.map看起来像

 {
     global: a;
     local: *;
 }

更多信息请见 http://www.akkadia.org/drepper/dsohowto.pdf