您的当前位置:首页正文

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

2023-02-26 来源:爱站旅游
导读DEBEG记录--001(调试core文件发现vfprintf()出错,制作动态库时的模板函数的使用注意点)

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

 

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

 

文件1-mutenTool.cpp

文件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

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

因篇幅问题不能全部显示,请点此查看更多更全内容