既然我没有代表写评论,我就得回答了。在
你不能用“一个(动态)库来管理它们”的原因是,Windows和Linux认为动态库文件(.dll的,.so's)是可执行的格式。Windows动态库有PE头,Linux不能执行,反之亦然,Linux共享库必须有ELF头,Windows不能执行。你的代码是否100%独立于平台并不重要。在
至于一个静态库,它应该可以使一个既可由Windows和Linux翻译的库。否则,您可以将独立于平台的“lib”组装为通用格式,如COFF或BIN,并将其链接到当前使用的平台上。甚至可以使用某种形式的运行时链接。在
很抱歉,我使用了答案部分,没有提供具体细节。但是,如果您只想在Linux和Windows上创建一个静态lib,它将被内联到代码中,那么这应该是可能的。在
编辑:
在做了一些研究之后,我发现,不可能使用MASM来组装一个平面二进制文件。显然,制定一个是违反EULA的?不管前面描述的使用通用格式的进程如何,MASM都无法使用它,因为它将PE/COFF作为“最低级别”的对象文件生成。在
所以解决办法可以是:;
1) 将您的程序集移植到类似NASM(netwideassembler)这样的程序集,它可以生成平面二进制文件。在
不管你如何得到平面二进制你将不得不
在Linux上:将平面二进制文件链接为ELF可执行文件,应该非常直接。在FLAT BINARY -> ELF EXECUTABLE
在Windows上:将PE/COFF头添加到平面二进制文件中,并将其链接到.exe/.dll文件中。微软有这个过程,基本上,锁定。我找不到任何关于如何做到这一点的例子。但理论上这个过程应该是这样的。在FLAT BINARY > PE/COFF -> WINDOWS EXECUTABLE
QuasarDonkey的方法可能是已决定者的一个选择(这就是我为什么要包括它),但我永远不会推荐它。在
实际上,唯一直接的选择是编译一个Windows库和一个Linux库,使用MASMs-PE/COFF格式作为基础是不实际的:)