c++ 如何强制gcc链接未使用的静态库

我有一个程序和一个静态库:

// main.cpp
int main() {}

// mylib.cpp
#include <iostream>
struct S {
    S() { std::cout << "Hello World\n";}
};
S s;

我想将静态库(libmylib.a)链接到程序对象(main.o),尽管后者不直接使用前者的任何符号。

以下命令似乎没有使用g 4.7的工作。他们将运行没有任何错误或警告,但显然libmylib.a将不会链接:

g++ -o program main.o -Wl,--no-as-needed /path/to/libmylib.a

要么

g++ -o program main.o -L/path/to/ -Wl,--no-as-needed -lmylib

你有什么更好的想法吗?

最佳答案
使用–whole-archive链接器选项。

在命令行后面的库不会丢弃未引用的符号。您可以通过在这些库之后添加–no-whole-archive来恢复正常的链接行为。

在你的例子中,命令将是:

g++ -o program main.o -Wl,--whole-archive /path/to/libmylib.a

一般来说,它将是:

g++ -o program main.o \
    -Wl,--whole-archive -lmylib \
    -Wl,--no-whole-archive -llib1 -llib2

转载注明原文:c++ 如何强制gcc链接未使用的静态库 - 代码日志