C++能不能把类写成动态链接库?

还有,写好了怎么加载,实例化这个类?... 还有,写好了怎么加载,实例化这个类? 展开
 我来答
御坂妹妹15842
推荐于2018-04-12 · TA获得超过326个赞
知道小有建树答主
回答量:197
采纳率:0%
帮助的人:225万
展开全部

简单的例子。

//shared_lib.hpp
#ifndef SHARED_LIBRARY
#define SHARED_LIBRARY

class TestClass
{
public:
    TestClass();
    ~TestClass();
    void test();
};

#endif
//shared_lib.cpp
#include "shared_lib.hpp"
#include <iostream>
TestClass::TestClass()
{
    // nothing to do
    std::cout << "constructor" << std::endl;
}

TestClass::~TestClass()
{
    // nothing to do
    std::cout << "destructor" << std::endl;
}

void TestClass::test()
{
    std::cout << "Hello world!" << std::endl;
}
# 编译shared_lib.cpp为libexample.so(因为我是Linux下,所以编译成so,Windows下编译成dll)
# 我使用的编译指令是
gcc -Wall -g -std=c++0x -Wpedantic shared_lib.cpp -shared -fPIC -o libexample.so

就此得到动态链接库。

然后在另一个地方调用它。

//main.cpp
#include "shared_lib.hpp"
int main(int argc, char const *argv[])
{
    TestClass t;
    t.test();
    return 0;
}
# 编译main.cpp为test
# 我使用的编译指令是
g++ -Wall -g -std=c++0x -Wpedantic main.cpp -L. -lexample -o test
# -Wall 表示启用所有警告和错误
# -g 表示添加debug用的信息
# -std=c++0x表示启用c++11标准特性
# -Wpedantic表示启用严格检查(所有不符合标准代码的都会被标识出来)

就此,我们得到了可执行文件test和动态链接库libexample.so。

同样的,Windows下的步骤也是类似的。只要在IDE或者编译指令中指定链接到动态链接库即可。

kja910
2015-02-21 · TA获得超过6858个赞
知道小有建树答主
回答量:602
采纳率:100%
帮助的人:226万
展开全部
可以,dll只是一种文件类型而已,只不过不能独自运行,里面写什么东西都行,不明白你为什么会有这样的疑问。
实例化的话如果库已经加载了,加载就是项目属性里面把库填进去就行了(如果是vs环境)。直接引用一下库的头文件然后创建对象就可以了。这根本不算个问题啊,你是不是想问动态库的运行原理呢。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式