假设我已经阅读了
this caveat,我仍然希望将TBB用作静态链接库. (假装我在
an environment工作,不允许用户创建自己的dylib.)但我真的不想重写TBB makefile来生成libtbb.a而不是libtbb.dylib.
是否有一个简单的命令行方式将libtbb.dylib转换为libtbb.o并使用相同的入口点?
我听到了一个很好的论据,因为从静态到动态不能走另一条路.即:动态库需要是PIC,将非PIC静态库转换为PIC是不可行的.但据我所知,这一论点并不适用于其他方向.
Here’s有人说在Windows上将.dll转换为.a是不可能的,但我认为他们只是在谈论将.dll或.exe备份到其原始的.o文件中的不可能性,并不一定说它不可能创建具有相同内容的可链接.o文件.此外,Windows上的情况是slightly odder than “real” PIC,虽然我不认为这是相关的.
解决方法
适用于Windows,Mac和Linux的英特尔线程构建模块(TBB)为
available as binary.如果您希望在iOS上使用Mac发行版中的libtbb.dylib,那么您就不走运了. Mac发行版针对英特尔(32位和64位).由于iOS在ARM处理器上运行,即使您找到了将动态库转换为静态库的方法,也无法使用它.
如果你找到一个针对ARM的其他目标的libtbb.dylib文件,那么你可以在iOS上使用它.实际上可以在iOS上加载动态库.看看dlopen(3)手册页.
最后,您应该阅读有关Grand Central Dispatch (GCD)的内容,它内置支持iOS和OS X中多核硬件上的并发代码执行.