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

Quu*_*one 6 tbb dylib static-libraries dynamic-library ios

假设我已经阅读过这个警告,我仍然希望将TBB用作静态链接库.(假装我在一个不允许用户创建自己的dylib 的环境中工作.)但我真的不想重写TBB makefile来生成libtbb.a而不是libtbb.dylib.

是否有一个简单的命令行方式将libtbb.dylib转换为libtbb.o并使用相同的入口点?

我听到了一个很好的论据,因为从静态到动态不能走另一条路.即:动态库需要是PIC,将非PIC静态库转换为PIC是不可行的.但据我所知,这一论点并不适用于其他方向.

这里有人说在Windows上将.dll转换为.a是不可能的,但我认为他们只是在讨论将.dll或.exe备份到其原始.o文件中的不可能性,并不一定说它不可能创建具有相同内容的可链接.o文件.此外,Windows上的情况比"真正的"PIC稍微有些奇怪,尽管我认为这并不重要.

0xc*_*ced 10

英特尔线程构建模块(TBB)可用作 Windows,Mac和Linux的二进制文件.如果您希望libtbb.dylib在iOS上使用Mac发行版,那么您就不走运了.Mac发行版针对英特尔(32位和64位).由于iOS在ARM处理器上运行,即使您找到了将动态库转换为静态库的方法,也无法使用它.

如果你找到一个libtbb.dylib针对ARM的其他目标文件,那么你可以在iOS上使用它.实际上可以在iOS上加载动态库.看看dlopen(3)手册页.

最后,您应该阅读Grand Central Dispatch(GCD),它内置支持iOS和OS X中多核硬件上的并发代码执行.

  • 是的,dlopen真的适用于iOS.您无法使用Xcode轻松创建dylib,但可以在命令行上使用clang创建它们. (2认同)