是否有人知道是否可以使用Win32静态库中的代码 在一个跨平台的?我知道我必须对代码进行一些更改,但是我认为除类之外,所有平台上的c ++代码都是相同的。对于简单类型,有人告诉我例如使用int16_t或int16_fast_t或简称。如果我可以从Visual Studio中复制标头和文件,然后使用代码精简版(例如代码本身是跨平台的)为Mac编译它们,那是正确的吗?
最好的问候,
K
答案 0 :(得分:2)
这取决于该库中的内容。这是一个Visual C ++ Win32静态库项目,这一事实告诉我们如何编译您的库。它没有告诉我们有关该库中包含什么代码的任何信息。这可能是完全可移植的标准C ++代码。也可能是代码,其中每一行都是Windows API函数调用,显然不会移植。
库的代码是否可移植都取决于代码。用short
或int16_t
替换int_fast16_t
不会增加代码的可移植性(除非最初使用short
假定了某些实现定义的属性)。因此,我不确定应该用short
全面替换int16_t
。 short
是语言内置的基本类型。 int16_t
是标准库(如果目标平台支持)的定义的类型。因此,从某种意义上说,int16_t
的可移植性实际上要比short
少。尽管int_fast16_t
总是被定义,short
也是如此。如果需要标准库提供的语义,请使用标准库的固定宽度整数类型。如果您不这样做,则没有理由使用它们。请注意,要在C ++中使用固定宽度整数类型,请包括C ++标头<cstdint>
而不是<stdint.h>
,这不能保证在C ++中存在。还要注意,<cstdint>
仅保证将声明放置在命名空间std
中。因此,要获得最大的可移植性,请使用std::int16_t
,因为不能保证::int16_t
可用。
如果库的代码可移植,那么您需要在另一个平台上构建该库的就是该平台的构建系统。因此,是的,如果代码是可移植的,那是正确的,您所要做的就是使用在其他平台上使用的任何工具在另一个平台上编译该代码……这就是对代码含义的定义。便携式...;-)