簡體   English   中英

具有繼承功能的C ++共享庫

[英]C++ shared libraries with inheritance

我有一個帶有基類(MyClassA)的庫(a.so)。 另一個庫(b.so)具有從MyClassA(在a.so中)繼承的類MyClassB。 我編譯a.so中孤立的MyClassA.h和MyClassA.cpp。 MyClassB.h和MyClassB.cpp是隔離編譯的(具有對MyClassA.h的引用,但未在b.so中添加MyClassA.h)。 然后,我將b.so鏈接到a.so。

總結一下:

  1. a.so包含MyClassA.h和MyClassA.cpp
  2. b.so包含MyClassB.h和MyClassB.cpp
  3. b.so鏈接到a.so

當我嘗試編譯時,由於b.so,我收到許多對MyClassA的引用錯誤。

當我編譯b.so並將MyClass.h添加到它時,該庫將編譯並運行而沒有任何錯誤。 因此:

  1. a.so包含MyClassA.h和MyClassA.cpp
  2. b.so包含MyClassB.h,MyClassB.cpp和MyClassA.h
  3. b.so鏈接到a.so

在C ++中是否可以使用我的第一個選項,還是要求始終在子類庫中包含基本標頭?

如果從ClassA派生ClassB ,則應在派生時定義 ClassA ,不僅要聲明引用 )。 這就是為什么必須包含ClassA頭文件的原因。

但是,如果你執行ClassA函數cpp文件,而不是在頭,實際的代碼 ClassA將是a.so ,因此,包括, ClassA頭文件是不是一個真正的問題。

如果class B是從class A派生class A ,則必須包括class A頭文件。

所有派生類必須在編譯時#include基類聲明。 在鏈接時必須知道基類的實現。

在您的情況下:

  1. a.so包含MyClassA.h和MyClassA.cpp
  2. b.so包含MyClassB.h和MyClassB.cpp,但是MyClassB.h`#include“ MyClassA.h”
  3. b.so鏈接a.so使用:

g ++ -o b.so -la

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM