6

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

是否有一种简单的命令行方法可以将 libtbb.dylib 转换为具有相同入口点的 libtbb.o?

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

有人说在 Windows 上将 .dll 转换为 .a 是不可能的,但我认为他们只是在谈论不可能将 .dll 或 .exe 破坏回其原始 .o 文件,不一定说这是不可能的创建具有相同内容的可链接 .o 文件。此外,Windows 上的情况比“真实” PIC 稍微奇怪,尽管我认为这无关紧要。

4

1 回答 1

10

英特尔线程构建模块 (TBB)以二进制形式提供,适用于 Windows、Mac 和 Linux。如果您希望libtbb.dylib在 iOS 上使用 Mac 发行版,那么您就不走运了。Mac 发行版面向 Intel(32 位和 64 位)。由于 iOS 在 ARM 处理器上运行,因此即使您找到了将动态库转换为静态库的方法,您也无法使用它。

如果您在libtbb.dylib其他地方找到了针对 ARM 的文件,那么您可能可以在 iOS 上使用它。实际上可以在 iOS 上加载动态库。查看dlopen(3)手册页。

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

于 2012-09-03T11:21:22.103 回答