首先,我在linux上用c ++ 11和g ++ 4.7来处理我的问题的所有部分。
我的问题的设置:我创建了一个共享库(我称之为“libA”),我在不同的程序中使用它。在这个库中是一个未在界面中公开的部分,因为它与程序无关。但是,现在,我想直接在另一个库(“libB”)中使用此前隐藏的部分。
因此,我的计划是从libA的隐藏部分创建一个新库。这将是“libSub”。然后libsub包含在libA和libB中。两者都编译没有错误。 但是,当我现在尝试编译依赖于libA的程序时,我收到很多错误,说有来自libSub的函数的未定义引用。
为了使结构更清晰:
// Sub.hpp
class Sub{
private:
// private variables
public:
// interface functions
};
的
// A.hpp
class Sub; //forward declaring the sub-class
class A{
private:
std::shared_ptr<Sub> s;
// more private variables
public:
// some interface functions
};
的
// A.cpp
#include <Sub.hpp> // include the declaration of the Sub class
// definitions of the member functions of A
的
// program.cpp
#include A.hpp
a=A();
这些库放在本地文件夹中,因为我想避免将它们安装到常规的lib文件夹中。我想将它们全部安装到全局lib文件夹可以解决问题。
问题是:有没有办法摆脱错误,仍然使用本地文件夹?如果是这样,怎么样?
答案 0 :(得分:0)
你是否曾尝试仅仅编译这个?
// A.hpp
class Sub; //forward declaring the sub-class
class A{
private:
Sub s;
// more private variables
public:
// some interface functions
};
此处Sub
是一个不完整的类型,A
将无法编译,因为您需要定义类。查看this以了解如何使用前向声明。
我假设您需要首先将libSub的头文件包含在其他库中。用一个小例子做到这一点,如果你有更多问题,请回来。