从多个 C++ 文件构建一个 .so 文件并使用它

Build a .so file from multiple C++ files and use it

我有一棵程序树,其中包含

outter.cc, outter.h b.cc, b.h c.cc, c.h

每个 .cc 文件如下所示:

outter.cc:

#include "b.h"
// do something

b.cc

#include "c.h"
// do something

c.cc

//do something

outer.cc中是一堆API的定义。我想生成一个 .so 文件,以便其他人在 link 他们的程序针对这个 .so 文件时可以使用我的 API。

我的问题包括:

  1. 如何生成这个.so文件?我基本上是将所有代码“打包”到一个 .so 文件

  2. 如果我成功生成了这个.so文件,如何使用呢?假设我在另一个目录 /home/xavier/test/ 中有一个 main.cc 文件,并且在 /home/xavier/test/ 中也有生成的 .so 文件。我应该如何编写这个 main.cc 以及我应该如何编译这个 main.cc 文件以使其使用我在 outter.cc 中定义的 API?

我正在使用 Mac OS X 和 g++

谢谢!

生成文件如下:

all:a.so

a.so: outer.o b.o c.o
    g++ $^  -fPIC -shared -o $@
%.o:%.cc
    g++ $< -I(your header file path) -c -o $@

生成 .o 文件时不要忘记 -c 标志

如果 liba.so 与 main.cc 在同一个文件夹中,您可以

g++ main.cc -la -o main

main.cc 应该包括 outter.h b.h c.h

或者您将 a.so 重命名为 liba.so 然后将其放入 /usr/lib/ 和 运行 g++ main.cc -la -o main