对共享库内部类的构造函数和析构函数的C++未定义引用错误 >,我在C++开发中是很新的。这个问题可能很傻,但我在任何教程、书籍、问题/回答中都找不到它的答案。如果有人能向我解释一下,那就太好了

对共享库内部类的构造函数和析构函数的C++未定义引用错误 >,我在C++开发中是很新的。这个问题可能很傻,但我在任何教程、书籍、问题/回答中都找不到它的答案。如果有人能向我解释一下,那就太好了,c++,C++,我在共享库libdummy中有1个头源对。因此: 这是虚拟的 class dummy { public: ~dummy(); dummy(); bool dosomething(int a); }; 这是dummy.cpp: #include "dummy.h" dummy::dummy() { //some assignments here clear(); } dummy::~dummy() { clear(); } bool dummy::

我在共享库libdummy中有1个头源对。因此:

这是虚拟的

class dummy
{
    public:
    ~dummy();
    dummy();

    bool dosomething(int a);
};
这是dummy.cpp:

#include "dummy.h"

dummy::dummy()
{
//some assignments here
    clear();
}

dummy::~dummy()
{
clear();
}

bool dummy::dosomething(int a)
{
    // do something here
    return true;
}
编辑:我在上面告诉您dummy.h和dummy.cpp的示例代码,但这些文件不在我手中。它们都装在图书馆里。我手头只有libdummy.so共享库文件

我有一个客户端可以访问我的共享库

client.h在这里:

#include "dummy.h"

class client
{
    public:
    void myownjob();

    dummy thingy;

    //and some functions here
};
最后是client.cpp:

#include "client.h"

void client::myownjob()
{
    thingy.dosomething(1);
}
现在我的问题是;当我试图编译这段代码时,我得到了构造函数和析构函数的未定义引用错误:

error: undefined reference to 'dummy::~dummy()'
error: undefined reference to 'dummy::dosomething(int)'
error: undefined reference to 'dummy::dummy()'
编辑:dummy.h和dummy.cpp位于libdummy.so内。我手头只有3个文件:libdummy.so、client.h和client.cpp

这就是为什么

我不能删除~ dummy;和假人;在dummy.h中,让编译器自动创建它们。因为dummy.h在libdummy.so共享库中。它不可直接编辑

我不能在dummy.h中做一些像~dummy{}和dummy{}这样的手镯式空定义。因为dummy.h在libdummy.so共享库中。它不可直接编辑


我不能将dummy.cpp包含到makefile的SRC_文件行中。因为dummy.cpp在libdummy.so共享库中。它不是一个单独的文件

我认为这是一个非常简单/初学者的问题,但我在任何地方都找不到它的答案。我必须做什么才能使用C++中共享库中的类,当我对构造函数和析构函数获得未定义的引用错误时?


提前谢谢。

请编译这两个文件。。如果您使用的是linux,那么

g++ client.cpp dummy.cpp

我不知道有什么NDK,但是这个错误是一个链接错误——在链接时你不提供库,即使它是一个动态库,你必须在链接时提供它

通常我会告诉你编译+链接如下:

g++ client.cpp -ldummy
-ldummy与libdummy.so的链接

但是考虑到你使用的是一些你不熟悉的makefile,我真的不知道你应该怎么做。不过我可以猜到:

显然,您有一个名为SRC_FILES的字段。一个快速且不完整的google建议您有一个名为LOCAL_LDLIBS的字段。如果是,请尝试设置:

LOCAL_LDLIBS = -ldummy
或者,如果libdummy.so文件不在标准路径中:

LOCAL_LDLIBS = -L/dummy/file/path -ldummy
/dummy/file/path显然是虚拟库的路径


请注意,根据您的配置,您可能需要添加-L,即使该文件位于您的工作目录中。

您是如何编译和链接的?请显示您正在使用的实际命令。听起来您可能没有为头文件编译或库文件链接添加适当的搜索路径。我使用Android ndk的ndk build命令编译它,而不是使用make。但我认为这是一个C++主题,这就是为什么我只在C++ +金环略图中添加了头文件的路径。cpp文件与头文件位于同一目录中。并链接到图书馆。我可以使用一些类。不知道这是否有用。dummy.cpp在libdummy.so中。我只有3个文件:libdummy.so、client.h和client.cpp。好的,我编辑了这个问题来再次澄清这一点。在我的问题中,我没有问我如何在Android makefile中做到这一点。但我问如何可以在一般C++中完成。这就是为什么我接受你的回答“g++client.cpp-ldummy”作为我问题的答案。非常感谢你。如果我不知道如何在Android makefile中做到这一点,也许我可以稍后在Android ndk标签下打开第二个问题