Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/linux/24.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/entity-framework/4.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++;适用于所有linux发行版 如何编译我的C++文件来处理所有Linux发行版。 我要编译它们的机器是Ubuntu 10.10_C++_Linux - Fatal编程技术网

编译C++;适用于所有linux发行版 如何编译我的C++文件来处理所有Linux发行版。 我要编译它们的机器是Ubuntu 10.10

编译C++;适用于所有linux发行版 如何编译我的C++文件来处理所有Linux发行版。 我要编译它们的机器是Ubuntu 10.10,c++,linux,C++,Linux,如果我在Ubuntu 10.10上编译它们,它们会在其他发行版上工作吗,比如Ubuntu、fedora、debian、非debian发行版。。等等 % gcc -o foo foo.c -static 由于它运行在相同的体系结构(64位、32位、arm、mips等)上,因此生成的二进制文件应该适用于大多数发行版 要点是:由于您事先不知道在目标系统上可以找到什么,因此必须将所有可以找到的东西捆绑到您正在发布的二进制文件中,或者在某种“chrooted”环境中部署外部lib(不能静态链接的东西)然

如果我在Ubuntu 10.10上编译它们,它们会在其他发行版上工作吗,比如Ubuntu、fedora、debian、非debian发行版。。等等

% gcc -o foo foo.c -static
由于它运行在相同的体系结构(64位、32位、arm、mips等)上,因此生成的二进制文件应该适用于大多数发行版


要点是:由于您事先不知道在目标系统上可以找到什么,因此必须将所有可以找到的东西捆绑到您正在发布的二进制文件中,或者在某种“chrooted”环境中部署外部lib(不能静态链接的东西)然后使用某种包装器来使用部署的lib而不是系统lib。

尽管@akira answer可能适用于您的情况,但它不是最好的解决方案。大多数Linux发行版都有打包系统,可以为您检索依赖项


如果你真的想编写Linux软件,而这些软件是在别人的机器上使用的,那么你需要研究一下“GNU自动工具”,它是驱动“/configure&&make all&&make install”的东西,你现在已经运行了不止一次了

如果您只使用Linux标准库中列出的库,那么动态可执行文件就可以了

对于其他库,可以链接它们的静态版本,也可以发布动态库;我更喜欢前者


我个人建议避免静态链接C库,因为这会阻止它提供的一些有用的功能工作,例如nss的东西。

这比它应该的要困难得多,至少对C++:

嗯,这个项目不是开源的?@Daniel你还是自己使用Autotools更好,即使你不是免费提供代码!否则,当代码所依赖的库发生变化时,您的生活将变得困难,但正如我所说,@akira idea很可能会做您想做的事情。如果他的项目需要GPL下的Autotools,即使只是在发布之前构建他的软件,他自己的软件使用GPL不兼容的许可证合法吗?(这是一个严肃的问题,不是GPL flamebait。)如果你只是分发二进制文件,当然是合法的。GPL涵盖了“衍生作品”,意思是“剪切和粘贴”源代码来制作新的东西,而不是使用工具来帮助你做其他事情。同样,使用Word也不会给微软带来版权,这对C来说是有效的,但不是C++。看见