[英]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。
總結一下:
當我嘗試編譯時,由於b.so,我收到許多對MyClassA的引用錯誤。
當我編譯b.so並將MyClass.h添加到它時,該庫將編譯並運行而沒有任何錯誤。 因此:
在C ++中是否可以使用我的第一個選項,還是要求始終在子類庫中包含基本標頭?
如果從ClassA
派生ClassB
,則應在派生時定義 ClassA
,不僅要聲明 ( 引用 )。 這就是為什么必須包含ClassA
頭文件的原因。
但是,如果你執行ClassA
函數cpp
文件,而不是在頭,實際的代碼 ClassA
將是a.so
,因此,包括, ClassA
頭文件是不是一個真正的問題。
如果class B
是從class A
派生class A
,則必須包括class A
頭文件。
所有派生類必須在編譯時#include
基類聲明。 在鏈接時必須知道基類的實現。
在您的情況下:
g ++ -o b.so -la
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.