我有一个程序和一个静态库:
// main.cpp
int main() {}
// mylib.cpp
#include <iostream>
struct S {
S() { std::cout << "Hello World\n";}
};
S s;
Run Code Online (Sandbox Code Playgroud)
我想将静态库(libmylib.a)链接到程序对象(main.o),虽然后者不直接使用前者的任何符号.
以下命令似乎不适合g++ 4.7.它们将在没有任何错误或警告的情况下运行,但显然libmylib.a不会链接:
g++ -o program main.o -Wl,--no-as-needed /path/to/libmylib.a
Run Code Online (Sandbox Code Playgroud)
要么
g++ -o program main.o -L/path/to/ -Wl,--no-as-needed -lmylib
Run Code Online (Sandbox Code Playgroud)
你有更好的想法吗?
Ale*_*x B 48
使用--whole-archive链接器选项.
在命令行之后的库将不会丢弃未引用的符号.您可以通过--no-whole-archive在这些库之后添加来恢复正常链接行为.
在您的示例中,命令将是:
g++ -o program main.o -Wl,--whole-archive /path/to/libmylib.a
Run Code Online (Sandbox Code Playgroud)
一般来说,它将是:
g++ -o program main.o \
-Wl,--whole-archive -lmylib \
-Wl,--no-whole-archive -llib1 -llib2
Run Code Online (Sandbox Code Playgroud)
我更喜欢其他答案,但这是另一个"解决方案".
使用ar命令从存档中提取所有.o文件.
cd mylib ; ar x /path/to/libmylib.a
Run Code Online (Sandbox Code Playgroud)然后将所有这些.o文件添加到链接器命令
g++ -o program main.o mylib/*.o
Run Code Online (Sandbox Code Playgroud)| 归档时间: |
|
| 查看次数: |
17681 次 |
| 最近记录: |