OS X:将.dylib转换为.a / .o(动态到静态)?

时间:2012-08-21 20:21:12

标签: ios static-libraries dylib tbb dynamic-library

假设我已阅读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,尽管我认为这不相关。

1 个答案:

答案 0 :(得分:10)

英特尔线程构建模块(TBB)适用于Windows,Mac和Linux 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中多核硬件上的并发代码执行。