Mac系统制作C++动态链接库
最近在学习使用C++语言学习一些关于多线程的知识,需要将一些多线程使用的函数单独用一个动态库进行封装起来调用,查了一些网上的资料,各种各样的办法,尝试了几种方式,总是会遇到一些报错。后面根据自己的理解,偶然成功了,再次进行记录一下当时的一些操作过程。
以下是我需要使用的一些文件:myFunc.h,myFunc.cpp,Thread_Ex4.cpp
// myFunc.h 申明了一些函数,以及申明定义量测使用的模板函数
#ifndef __MYFUNC_H_
#define __MYFUNC_H_
#include <iostream>
#include <thread>
using namespace std::chrono;
using namespace std;
template<typename T>
void measure(T&& func)
{
auto beg_t = system_clock::now();
func();
auto end_t = system_clock::now();
duration<double> diff = end_t - beg_t;
cout<<"performTest total time:"<<diff.count()<<endl;
}
// user-defined function
void func();
#endif // !__MYFUNC_H_
// myFunc.cpp:自定义函数的定义
#include "myFunc.h"
void func()
{
cout<<"This is func thread "<<endl;
int s = 0;
for(int i =0;i < 5;i++)
s+= i;
}
// main 入口
// Thread_Ex4.cpp
#include "myFunc.h"
#include <iostream>
int main(void)
{
measure(func);
}
在这里,首先对myFunc.cpp进行编译g++ -g -shared myFunc.cpp -o libmyFunc.dylib -std=c++11
这里特别需要注意的是Mac系统下动态库的命名:lib[libname].dylib
接下来就可以调用这个动态库:g++ -g Thread_Ex4.cpp -o Thread_Ex4 -I . -L . -l myFunc -std=c++11
说明:
1. -l(小写L)后接xxxx 表示调用libxxxx.dylib 库
2. 如果库不在系统默认的目录下要使用-L后接路径 再接-lxxxxx
3. -I(大写i)后接路径,表示在此路径下寻找头文件 xxxx.h
完结。