DEBEG记录--001(调试core文件发现vfprintf()出错,制作动态库时的模板函数的使用注意点)

本文探讨了C++中模板函数在动态库中的正确使用方法,并通过具体示例展示了如何避免因分离声明与定义而导致的链接错误问题。

1.多次用printf打印线程ID可能会导致栈溢出,从而导致产生段错误。

 

2.在C++中如果在制作含有模板函数的动态库时,一定要注意模板函数的声明和实现要放在一个文件中,建议最好在一个hpp文件中,否则即使动态链接动态库的时候没有出错,在执行的时候会报找不到定义的那个模板函数的错。

 

文件1-mutenTool.cpp

#include "mutenTool.hpp"
using namespace std;
void fun()
{
        long s = 0;
        for(int i = 0;i<200000000;i++)
        {
          s+= i;
        }
        cout << s<< endl;

}

 

文件2-mutenTool.hpp

#ifndef __TOOL__
#define __TOOL__
#include <iostream>
using namespace std;
template<class T>
void measure(T&& func)
{
        using namespace std::chrono;
        auto start = system_clock::now();
        func();
        duration<double> diff = system_clock::now()-start;
        cout<<"eclapsed:"<< diff.count() << "seconds"<< endl;
}
void fun();
#endif

文件3-main.cpp

#include <iostream>
#include "mutenTool.hpp"
int main()
{
        measure(fun);
        return 0;

}

文件1和文件2生成动态库:

g++  -shared -o libmutenTool.so mutenTool.cpp  -std=c++11 -fPIC

文件三调用动态库:

g++ -o main main.cpp -L/home/muten/C/utility -lmutenTool -std=c++11

动态库调用的时候要注意-L后面的要根据自己的目录灵活调整。

上面的代码是可以正常运行的,但是如果将mutenTool.hpp中的函数模板分开声明定义,则在调用的时候会出现链接不到的问题,可测试一下。

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值