Class 独立库中的成员函数定义,以及 link 依赖项
Class member functions definitions in separate libraries, and link dependencies
给定 class C 在 C.h 中定义,
和成员函数 f1 到 fn,以及成员函数 g1.
f1..fn 的定义在 f.cpp 而 g1 的定义在 g.cpp.
f.cpp 被 link 编辑到 lib1.so 而 g.cpp 被 link 编辑到 lib2.so.
g.cpp依赖于C.h,lib2.so依赖于lib1.so。
但是 lib1.so 并不完全依赖于 lib2.so
当我有使用除 g1() 之外的 C 成员的可执行文件并且我尝试 link 它仅针对 lib1.so 时,linking 失败并出现未解析的引用:
lib1.so:未解决的对 C::g1() 的引用(在 lib2.so 中定义)
如果可执行文件中的代码实际上并不直接使用 g1,我是否可以 linking 完全独立于 lib2?
我认为您所做的是将 g1() 原型放入 C.h,因此您必须像@Yksisarvinen 评论的那样提供它的实现。
你可能想在你的第二个库中做的是用 g1() 原型创建 D.h 或可能从 C.h in [=19] 的 subclass class =] 并为您的 D::f1()
放置新的实现(来自 g1())
最好使用抽象 class 来定义接口并提供 2 个实现。我会做什么的简单示例:
//iface.h
class iface
{
public:
virtual void f1() = 0;
}
//serial.h & cpp
class serial: public iface
{
public:
final void f1(); //serial implementation in .cpp
}
//para.h & .cpp
class para: public iface
{
public:
final void f1(); //parallel implementation in .cpp
}
给定 class C 在 C.h 中定义, 和成员函数 f1 到 fn,以及成员函数 g1.
f1..fn 的定义在 f.cpp 而 g1 的定义在 g.cpp.
f.cpp 被 link 编辑到 lib1.so 而 g.cpp 被 link 编辑到 lib2.so.
g.cpp依赖于C.h,lib2.so依赖于lib1.so。 但是 lib1.so 并不完全依赖于 lib2.so
当我有使用除 g1() 之外的 C 成员的可执行文件并且我尝试 link 它仅针对 lib1.so 时,linking 失败并出现未解析的引用:
lib1.so:未解决的对 C::g1() 的引用(在 lib2.so 中定义)
如果可执行文件中的代码实际上并不直接使用 g1,我是否可以 linking 完全独立于 lib2?
我认为您所做的是将 g1() 原型放入 C.h,因此您必须像@Yksisarvinen 评论的那样提供它的实现。
你可能想在你的第二个库中做的是用 g1() 原型创建 D.h 或可能从 C.h in [=19] 的 subclass class =] 并为您的 D::f1()
放置新的实现(来自 g1())最好使用抽象 class 来定义接口并提供 2 个实现。我会做什么的简单示例:
//iface.h
class iface
{
public:
virtual void f1() = 0;
}
//serial.h & cpp
class serial: public iface
{
public:
final void f1(); //serial implementation in .cpp
}
//para.h & .cpp
class para: public iface
{
public:
final void f1(); //parallel implementation in .cpp
}