导出链接到动态库的静态库中的符号

OhM*_*ere 6 c++ linker dynamic-linking static-libraries dllexport

我在MSVC2017中有以下场景:

  1. 具有该功能的静态库bool foo()
  2. 链接上面静态库的动态链接库
  3. 使用显式运行时链接加载动态链接库并foo()通过以下方式调用的应用程序GetProcAddress

在静态库中,foo()定义如下:

extern "C" __declspec(dllexport) bool foo() 
{
    return true;   
}
Run Code Online (Sandbox Code Playgroud)

现在,由于foo()不被动态链接库使用,因此它的符号不会被导出,因此在应用程序使用时无法找到GetProcAddress

我努力了:

#pragma comment(linker, "/include:foo")

和:

#pragma comment(linker, "/export:foo")

如果我将定义移动到动态链接库(不是可行的解决方案) ,我可以使用 Dependency Walker 看到导出的内容foo(),但是当我使用上述链接器开关将定义保留在静态库中时,我似乎无法导出符号。我认为这是因为该符号仍未使用,因此仍然没有导出?

我想要一个适用于 Windows 上的 MSVC 和 Linux 上的 Clang 的解决方案。谢谢!

OhM*_*ere 1

最后我的解决方案是创建一个虚拟函数,调用该函数foo()强制导出该编译单元中的所有符号。