![有什么方法可以确保静态库的少数符号确实加载到.so 文件中?](https://linux22.com/image/954215/%E6%9C%89%E4%BB%80%E4%B9%88%E6%96%B9%E6%B3%95%E5%8F%AF%E4%BB%A5%E7%A1%AE%E4%BF%9D%E9%9D%99%E6%80%81%E5%BA%93%E7%9A%84%E5%B0%91%E6%95%B0%E7%AC%A6%E5%8F%B7%E7%A1%AE%E5%AE%9E%E5%8A%A0%E8%BD%BD%E5%88%B0.so%20%E6%96%87%E4%BB%B6%E4%B8%AD%EF%BC%9F.png)
我们有大量 cpp 文件,并且需要对其中一段代码进行一些澄清。由于我们有 cpp 文件,因此我们将其编译为多个静态库,然后将其编译为一个共享库。
考虑两个属于不同库的 cpp 文件。
一个.cpp
#include <stdio.h>
extern void ExternFunction ();
void PrintFromLib1 ()
{
printf ("I am from Lib1");
}
复制代码
#include <stdio.h>
#include "Lib1.h" // header file of a.cpp
void ExternFunction ()
{
printf ("ExternFunction");
}
void PrintFromLib2 ()
{
printf ("I am from Lib2");
}
在 .a 文件中,我能够看到这里的所有函数,但是当我们创建 .so 文件时,没有任何符号被加载到那里。
但是,如果我传递一个调用这些函数的 cpp 文件,那么符号就会被加载到 .so 文件中。
即使是外部函数,除非我们引用它,否则它也不会进入符号。
Compilation steps:
- g++-c-o Lib1.o Lib1.cpp-fPIC
- g++-c-o Lib2.o Lib2.cpp-fPIC
- ar rcs Lib1.a Lib1.o
- ar rcs Lib2.a Lib2.o
- gcc -shared -o 结果.so Lib1.a Lib2.a
我的理解是否正确,除非我们引用它,否则它不会被加载?
那么,有什么方法可以确保这些符号被明确地添加到.so中吗?
提前致谢。