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中的函数模板分开声明定义,则在调用的时候会出现链接不到的问题,可测试一下。
因篇幅问题不能全部显示,请点此查看更多更全内容