我们有大量 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中吗?
提前致谢。