从多个 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。
我的问题包括:
如何生成这个.so文件?我基本上是将所有代码“打包”到一个 .so 文件
如果我成功生成了这个.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
我有一棵程序树,其中包含
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。
我的问题包括:
如何生成这个.so文件?我基本上是将所有代码“打包”到一个 .so 文件
如果我成功生成了这个.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