Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/157.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 静态库可移植性_C++_Linux_Linker_Static Libraries - Fatal编程技术网

C++ 静态库可移植性

C++ 静态库可移植性,c++,linux,linker,static-libraries,C++,Linux,Linker,Static Libraries,简短的问题。如果我编写了C++静态库并在Ubuntu上用G++编译它,我能安全地假定它可以用G++在Linux的其他发行版上链接吗? < P>二进制文件在Linux系统中是不可任意互换的,无论是可执行文件、静态库还是共享库。 这就是为什么几乎所有软件包都是作为源代码分发的,而包管理器系统负责如何配置和编译这些软件包 也就是说,商业软件应该在不透露实际源代码的情况下发布,通常由供应商为各种linux发行版(交叉)编译。不,你不能。您可能需要为特定的目标系统和CPU交叉编译它。交叉编译吗?你能详细说

简短的问题。如果我编写了C++静态库并在Ubuntu上用G++编译它,我能安全地假定它可以用G++在Linux的其他发行版上链接吗?

< P>二进制文件在Linux系统中是不可任意互换的,无论是可执行文件、静态库还是共享库。 这就是为什么几乎所有软件包都是作为源代码分发的,而包管理器系统负责如何配置和编译这些软件包


也就是说,商业软件应该在不透露实际源代码的情况下发布,通常由供应商为各种linux发行版(交叉)编译。

不,你不能。您可能需要为特定的目标系统和CPU交叉编译它。交叉编译吗?你能详细说明吗?这太宽泛了,不能在这里详细说明。请尝试谷歌AbIS和交叉编译。您只能假设可以使用相同的精确版本“代码> GCC < /Cube >安全链接,并与您的静态库链接到同一CPU家族的C++共享库的相同版本。虽然
gcc
libstdc++
确实有一些向后兼容的ABI保证,但我不会依赖它,我只会假设它将与相同版本的gcc兼容。简短回答:不,这取决于您的库的功能,它所依赖的其他库以及它们是否安装在其他系统上,是否取决于特定的硬件(32位、64位,…),等等。因此正确的方法应该是这样的:我想创建开源库-我提供源代码,我想创建一个商业图书馆——我在各种目标之间编译,@ AkasaTakasaTa对于开源,你可能会考虑提供一个AutoAKE包,对于商业来说,你必须编译它以支持你认为支持的各种发行版,并提供二进制文件。