0

首先,我在 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 文件夹可以解决问题。

问题是:有没有办法摆脱错误并仍然使用本地文件夹?如果是这样,怎么办?

4

1 回答 1

0

你试过只编译这个吗?

// A.hpp
class Sub; //forward declaring the sub-class
class A{
    private:
       Sub s;
       // more private variables
    public:
        // some interface functions
};

Sub是一个不完整的类型,A不会编译,因为您需要定义类。看看这个,看看如何使用前向声明。

我假设您需要首先将 libSub 的头文件包含在其他库中。用一个小例子来做,如果你有更多的问题回来。

于 2013-11-07T16:05:51.903 回答