如何在代码中使用gcc或clang强制包含静态库中的符号?

时间:2018-03-29 17:10:01

标签: c++ gcc clang

我在静态库中有一个全局,它从ctor / dtor中的注册商注册和注销,但是没有通过-u symbol--whole-archive它就永远不会被调用。

使用msvc,您可以强制在代码中使用#pragma comment(linker, "/include:__mySymbol")包含符号来解决此问题。我能用代码,gcc和/或clang来做同样的事情吗?

重现这一点非常容易:

可执行文件:

// main.cpp
int main() {}

静态库依赖于可执行文件:

// test.cpp
#include <iostream>

struct Test {
    Test() { std::cout << "Test()\n"; }
    ~Test() { std::cout << "~Test()\n"; }
};

Test test;

如果静态库是共享库,则打印该程序。如果静态库使用--whole-archive,程序将打印出来。但是我想在代码中控制它,而不是使用次优的编译标志(或-u symbol:编译标志依赖于代码中的符号名称。)

0 个答案:

没有答案