对子库中函数的未定义引用

时间:2013-11-07 15:57:50

标签: c++ c++11 shared-libraries undefined-reference

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

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

1 个答案:

答案 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的头文件包含在其他库中。用一个小例子做到这一点,如果你有更多问题,请回来。