C++ 从多个C++;文件并使用它

C++ 从多个C++;文件并使用它,c++,g++,shared-libraries,C++,G++,Shared Libraries,我有一个程序树,其中包含 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 //do something c.cc #include "c.h" // do something //do something 在o

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

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
//do something
c.cc

#include "c.h"
// do something
//do something
outer.cc
中有一组API定义。我想生成一个.so文件,以便其他人在将程序链接到此.so文件时可以使用我的API

我的问题包括:

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

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

  • 我正在使用MacOSX和g++


    谢谢

    像下面这样的makefile:

    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 $@
    
    main.cc应包括outter.h b.h c.h

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

    ,如果
    outer.h
    API设计用于隐藏
    b.h
    c.h
    的内部和类型,那么main.cc只需要
    #包含
    。谢谢您的回答!还有一个问题!如果
    b.h、c.h
    outter.h
    有不同的目录怎么办?我应该如何处理
    -I(您的头文件路径)
    ?@ConradParker谢谢您的评论。是
    outter.h
    应该向API用户隐藏
    b.h
    c.h
    的详细信息。但是你能更具体地说“设计来隐藏内部和类型”吗?举个例子就好了。我刚刚试过你的方法。这在我这边不起作用。1.它应该是
    g++$<-I(您的头文件路径)-c-o$@
    ,您错过了-c标志。2.当我编译main.cc
    g++main.cc-la-o main
    时,出现了这样的错误:
    致命错误:“找不到outter.h”文件
    。我需要把
    outter.h,b.h,c.h
    也放在
    /home/xavier/test
    中吗?很抱歉,我错过了-c,还有一个致命错误:“找不到outter.h”文件,你可以使用g++main.cc-I(你的头文件路径)-la-o main