我正在努力让一个midi编译器PMML重新工作。是的,它本身就是一种编译标准midi文件的编程语言。简言之,在使用最新版本的cygwin和minGW使程序在windows下正常工作后,我想转到linux系统使其正常工作。
然而,在将其转移到linux系统之前,必须应用一些初始补丁。
- 将系统函数的外部从项目中的本地头文件中移出,以消除类型冲突
- 替换它们,包括系统头、stdlib.h、string.h,如果需要,还包括errno.h
- 还将此构造sys_errlist[errno]替换为strerror(errno)。这使得该包能够在windows下非常干净地编译,并且能够正常工作
我选择了arch Linux 64位,在windows 7 64位的VMWare播放器6.0.2下运行。当我将源代码移到arch时,它们编译得很好,但在测试套件中失败了,产生了segfault。随后对gdb的研究表明,不知何故,一个函数的记忆力变差了,但我一辈子都不明白它为什么会这样做。我知道windows和Linux分配内存的方式不同,但就是不明白为什么会出现这个问题。如有任何帮助,我们将不胜感激。与我合作的消息来源在这里。https://dl.dropboxusercontent.com/u/3051632/pmml-0.2p2.tar.gz
谢谢!
编辑。似乎在仔细看了一会儿代码后,答案只是打了我一耳光。。。其中一件非常简单的事情。似乎在函数__get_expression()中,程序出现故障的地方,它崩溃的原因是。。。一个简单的未分配变量问题,编译没有发现。现在,找出传递给函数的内容以使其工作。
尝试使用valgrind。它是跟踪内存问题的最佳linux工具。
你所要做的就是通过valgrnid:运行你的应用程序
# valgrind --leak-check=full --show-reachable=yes ./your_app