有什么方法可以确保静态库的少数符号确实加载到.so 文件中?

有什么方法可以确保静态库的少数符号确实加载到.so 文件中?

我们有大量 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:

  1. g++-c-o Lib1.o Lib1.cpp-fPIC
  2. g++-c-o Lib2.o Lib2.cpp-fPIC
  3. ar rcs Lib1.a Lib1.o
  4. ar rcs Lib2.a Lib2.o
  5. gcc -shared -o 结果.so Lib1.a Lib2.a

我的理解是否正确,除非我们引用它,否则它不会被加载?

那么,有什么方法可以确保这些符号被明确地添加到.so中吗?

提前致谢。

相关内容