从多个C++文件生成 .so 文件并使用它

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

本文关键字:文件 so C++      更新时间:2023-10-16

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

outter.cc, outter.hb.cc, b.hc.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 文件,以便其他人在将他们的程序与此 .so 文件链接时可以使用我的 API。

我的问题包括:

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

  2. 如果我设法生成了这个 .so 文件,如何使用它?假设我在另一个目录中有一个main.cc文件/home/xavier/test/并且我在/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