Mac OS中编译的静态库(.a)可以在Linux中工作吗?

时间:2018-07-30 14:17:56

标签: static linker archive

在Mac OS中编译的静态库(.a)在Linux中可以工作吗? Mac OS和Linux中的档案格式是否相同?

2 个答案:

答案 0 :(得分:1)

  

在Mac OS中编译的静态库(.a)在Linux中可以工作吗?

是的,但仅当您使用cross-compiler编译将放入该库的对象文件时。

  

Mac OS和Linux中的存档格式是否相同?

在Linux和Mac OSX之间, <string-array name="year">// Year spinner population <item>2000</item> <item>2001</item> <item>2002</item> <item>2003</item> <item>2004</item> <item>2005</item> <item>2006</item> <item>2007</item> <item>2008</item> <item>2009</item> <item>2010</item> <item>2011</item> <item>2012</item> <item>2013</item> <item>2014</item> <item>2015</item> <item>2016</item> <item>2017</item> <item>2018</item> <item>2019</item> </string-array>// End of year spinner population <string-array name="make">// Make spinner population <item>Acura</item> <item>Audi</item> </string-array>// End of Make spinner population <string-array name="Acura"> <item>2000</item> <item>2006</item> <item>CL</item>// All Models grouped under Acura should be here <item>Integra</item> <item>MDX</item> <item>NSX</item> <item>RL</item> <item>RSX</item> <item>TL</item> <item>TSX</item> </string-array> <string-array name="CL"> <item>2001</item> <item>2003</item> </string-array> <string-array name="Integra"> <item>2000</item> <item>2001</item> </string-array> <string-array name="MDX"> <item>2001</item> <item>2006</item> </string-array> <string-array name="NSX"> <item>2000</item> <item>2005</item> </string-array> <string-array name="RL"> <item>2000</item> <item>2006</item> </string-array> <string-array name="RSX"> <item>2002</item> <item>2006</item> </string-array> <string-array name="TL"> <item>2000</item> <item>2006</item> </string-array> <string-array name="TSX"> <item>2004</item> <item>2006</item> </string-array> <string-array name="Audi"> <item>2001</item> <item>2007</item> <item>Audi1</item> <item>Audi2</item> </string-array> <string-array name="Audi1"> <item>2001</item> <item>2006</item> </string-array> <string-array name="Audi2"> <item>2004</item> <item>2007</item> </string-array> archive files的格式很有可能是相同的(我尚未验证,但是大多数UNIX系统使用上面引用的格式),但事实并非如此。不会对您有帮助:存档库只不过是包含一些索引的.a文件的串联,并且.o文件本身在Linux(ELF object file format)和Mac OSX之间是不同的( Mach-O object file format

Linux链接器在.o内部查找不会有任何麻烦,但是它将忽略在其中找到的所有非ELF文件。

答案 1 :(得分:0)

哪个 Linux? Linux已针对许多CPU架构进行了编译。 Mac目前仅适用于x86。

正如其他人所提到的,Mac使用Mach-O可执行格式,而Linux通常使用ELF,并且处理系统调用的方式以及可用的库完全不同。

因此,实际上,在开箱即用的系统上,可能会有相似之处,但是不太可能会运行任何东西。

问题是:您要做什么?

通过添加执行即时翻译的代码并实现缺少的库,有多种方法(如http://www.darlinghq.org)使一个平台上的可执行文件运行在另一平台上。

也许还可以创建一个.a文件,其中包含多个平台的可执行文件,因此编译器将选择正确的一个文件而忽略另一个文件。如果您使用交叉编译器,则可能会在包含为Linux编译的代码的Mac上构建.a