在Mac OS中编译的静态库(.a)在Linux中可以工作吗? Mac OS和Linux中的档案格式是否相同?
答案 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
。