Articles of 可移植性

简单的C代码可以在HPUX上正常工作,但是Linux上的段错误。 为什么?

我很长时间没有做过任何严肃的C,希望能够快速解释一下。 以下代码在HP / UX上编译并运行良好。 它在GCC 4.3.2上编译没有任何警告(甚至是在gcc-Wall中),但在Linux上运行时却是segfaults。 谁能解释为什么? #include <stdio.h> int main() { char *people[] = { "Abigail", "Bob" }; printf("First: '%s'\n", people[0]); printf("Second: '%s'\n", people[1]); /* this segfaults on Linux but works OK on HP/UX */ people[1][0] = 'R'; printf("First: '%s'\n",people[0]); return(0); }

docker图像可移植到不同的linux风格?

docker图像可移植到不同的linux风格? 比方说,如果我安装了基于OEL的Docker镜像,可以在Mac上的boot2docker中运行这个镜像吗?

汇编程序是否可以在Linux发行版之间移植?

在Linux发行版之间是否可以使用汇编程序格式提供的程序(模CPU架构差异)? 这里是我的问题的背景:我正在研究一种新的编程语言(命名为Aklo),其操作方式将是经典编译为.s并将结果提供给GNU汇编程序。 很明显,最终将自己的实现编写好,但我已经辞去了维护它在C + +解决egg和egg问题:假设你第一次下载编译器,它本身写在Aklo,如何你编译它? 据我了解,不同的Linux发行版和其他类似UNIX的系统对二进制格式有不同的约定。 但是我发现,一个解决scheme可能是发送.s文件(每个CPU架构一个):假设你已经安装了GNU汇编程序,或者可以安装GNU汇编程序。 当然,我仍然需要一个引导编译器,但是这并不需要很快; 我可以用Python编写它。 汇编程序是否可移植的方式,二进制文件不是? 还有没有其他的绊脚石我没有想到? 添加回应一个答案: 我曾经看过LLVM,肯定有很多好东西,这会让我的生活变得更轻松,只不过它会导致对安装的正确版本的LLVM的依赖。 依赖开发机器并不会那么糟糕,但是在一个通常将程序作为源代码运行的世界中,对于每一个在Aklo编写的程序的每个用户都会产生同样的依赖性,我也决定这样做高昂的代价付款。 但是,如果将编译好的程序作为汇编程序运行,那么解决这个问题,我可以使用LLVM,这将是一个巨大的胜利。 所以关于汇编程序可移植性的问题甚至比我最初意识到的要重要得多。 结论:从这里和LLVM邮件列表http://lists.cs.uiuc.edu/pipermail/llvmdev/2010-January/028991.html上的答案看来,坏消息是这个问题是无法解决的,但好消息是这意味着使用LLVM使其不会变得更糟,所以我可以自由地这样做,并获得它的所有优点。

构build多个平台的Linux二进制文件

帮我解决一个分数。 我有一个用C ++编写的软件,可以在尽可能多的Linux发行版上运行,我需要找出一个有效的策略。 我试图在这种情况下运输二进制文件而不是源代码(可能是很好的知道)。 这已经是一个商业产品,我有知识产权问题,阻止我开源产品,但也意味着我必须处理无数的GPL问题。 目前的推理线是select一个最不起眼的分母,并把所有东西都build立起来。 这有两个主要的含义,我觉得反作用。 旧版GCC中的C ++支持缺less一些更加现代的C ++特性。 最不共同点是红帽企业Linux 4(RHEL4) 我绝对不需要整个C ++ 11function集,但是我想把C ++支持提高到Visual C ++ 2010.我正在细读使用Clang / libc ++而不是GCC / libstdc ++在可能的情况。 对于构buildC ++应用程序,RHEL4似乎没有广泛的跨平台支持。对于不同版本的Linux中ABI的稳定性,我还没有多less见识,但是我担心RHEL4比麻烦更麻烦。 试图build立基于less数的所有分布是不可行的策略。 我假设编译不同版本的Linux软件最好是通过目标平台上的工具编译目标平台的软件来完成的。 如果你不接受这个,我现在也在假设你将跨Linux平台运行大量的可移植性问题。 不要谈论你可以或不能链接的许多库,因为跨平台/发行版的C ++ ABI不稳定。 但是我可能是错的,我想听取定期处理这个问题的人的意见。 什么工作,为什么? 或者更重要的是,什么不行?

GLIBCXX版本

如果我在我的机器上编译一个C ++程序,并在另一个(使用较旧的软件)上运行它,则会得到: /usr/lib/libstdc++.so.6: version `GLIBCXX_3.4.9' not found . /usr/lib/libstdc++.so.6: version `GLIBCXX_3.4.9' not found 。 实际上在我的系统上glibc更新(我得到了gcc-libs 4.5.1:libstdc ++。so.6.0.14)和strings /usr/lib/libstdc++.so.6 | grep GLIBCXX strings /usr/lib/libstdc++.so.6 | grep GLIBCXX从strings /usr/lib/libstdc++.so.6 | grep GLIBCXX打印到GLIBCXX_3.4.14 。 在另一个系统上,它只打印到GLIBCXX_3.4.8 (我有libstdc ++。so.6.0.8)。 所以我有几个问题: 为什么我的链接程序将C ++二进制文件与libstdc ++版本GLIBCXX_3.4.9而不是GLIBCXX_3.4.14 ? 如果我GLIBCXX_3.4 libstdc ++版本GLIBCXX_3.4编译我的二进制文件, GLIBCXX_3.4我猜它几乎在任何地方运行。 这是否意味着任何问题? (例如:它会使用更老的algorithm,因此更糟糕的algorithm实现?) 如果相反,我静静地链接我的程序对我的libstdc ++,我想它会运行到处; 当然,这个二进制文件会更大(〜1MB),其他的优点和缺点呢? 我可以强制链接器链接我的二进制文件与给定版本的libstdc ++吗?

什么是最小的Windows(PE)可执行文件?

作为编写编译器的先驱,我试图了解Windows(32位)便携式可执行文件格式。 特别是我希望看到一个裸机可执行文件,除了正确加载,运行和退出之外什么也不做。 我已经尝试编写和编译一个简单的C主函数,它除了生成的.exe是〜22KB,并且包含从KERNEL32.DLL(可能被LIBC用来设置环境,堆等)的许多import。 即使是DOS头可能会更小(它目前打印默认“这个程序不能在DOS模式下运行”)。 什么是最小的Windows 32位可执行文件的结构?

多平台的便携式python

我想在虚拟环境中的闪存驱动器上安装python,以便我可以在任何地方开发代码。 这是可以这样做,我可以在Windows / Mac / Linux电脑上使用我的闪存驱动器?

Windows和Linux之间的C ++可移植性

我有一个关于编写程序在Windows和Linux之间可移植的问题。 最近我意识到,如果你编写一个使用任何外部库的程序,如果这个库没有linux版本(或者在linux下开发的时候是windows版本),那么你就搞定了。 这里是我的问题:如果我在linux中编写一个链接到lol.a的程序,然后我想在Windows上编译并运行它,而不用重新编译lol.a到lol.lib中,那么可以像MinGW或Cygwin这样做吗? 链接到Windows平台上的.a文件以生成可以运行Windows的.exe文件?

阻止MSYS'bash'杀死陷阱^ C的进程

我有一个控制台模式的Windows应用程序(从Unix移植),最初devise为在收到^ C (Unix SIGINT )时进行干净的退出。 在这种情况下,一个干净的退出涉及等待,可能相当长的时间,远程networking连接closures。 (我知道这不是^ C的正常行为,但我不能改变它。)这个程序是单线程的。 我可以捕获^ C signal(SIGINT) (如在Unix下)或SetConsoleCtrlHandler 。 当程序在CMD.EXE下运行时,可以正常工作。 但是,如果我使用MSYS附带的“bash”shell(我正在使用MinGW环境来构build程序,因为这样我可以重新使用Unix makefiles),那么程序会被强制终止一些随机的短时间100毫秒)。 这是不可接受的,因为正如我所提到的,程序需要等待远程networking连接closures。 人们很可能会希望在MSYS bash下运行这个程序。 此外,这个效果打破了testing套件。 我一直无法find任何方法来解决这个问题,无论是从程序(理想)还是通过shell的设置(可以接受)。 谁能推荐任何东西?

使用免费工具开发轻量级(无运行时)基于Windows的GUI应用程序

有谁知道可以支持在Windows平台上开发GUI应用程序的免费工具(语言,环境)吗? 我正在寻找能够创build一个单一的可执行文件,不依赖于任何外部运行时或库。 我希望能够以与Process Explorer或SysInternals的Autoruns非常相似的方式运行此EXE。 换一种说法; 没有安装程序,便携式应用程序。 此应用程序还必须提供一个相当丰富的窗口(控件,小部件等)用户界面,并应运行在Windows 2000,XP,Vista和更高版本。 我知道C / C ++,但我正在寻找一种环境/语言,为GUI开发提供更多特定和更快的支持。 另外,delphi也花钱。