如何从MSYS执行linux二进制文件

时间:2012-06-13 20:29:03

标签: msys

我想在Windows上尝试在源代码中分发* nux的程序。这是一个简单的程序,有几个C源文件和标题

  1. 我有Mingw / Msys,我首先尝试通过运行make来编译它,但不幸的是我得到了模糊的错误(.text+0x175): undefined reference to 'strsep',这可能表明autotools或类似的问题,谷歌搜索,但这就是我可以得到的

  2. 正如我提到它是一个简单的程序,我也尝试用VS2008编译它,直到我认为它使用unix头文件来解析命令行参数,所以我也无法做到这一点

  3. 我启动了我的Ubuntu笔记本电脑并在第二个程序中编译了程序,并且测试得很好,然后我在我的Windows Msys文件夹中复制了二进制文件。没有运气因为文件不能被执行(当然在Msys提示下) - 它没有执行标志,并且Msys上的chmod有一个“功能”使chmod +x不可用


  4. 更新

    这是我在尝试编译时从msys提示符获得的错误:

    f77_diagram.c: In function 'handle_goto':
    f77_diagram.c:57:4: warning: implicit declaration of function 'strsep' [-Wimplicit-function-declaration]
    [...]
    gcc  -o f77_diagram block.o do_loop.o f77_diagram.o if.o label.o \
                                      links.o parse_fortran.o
    f77_diagram.o:f77_diagram.c:(.text+0x175): undefined reference to `strsep'
    collect2: ld returned 1 exit status
    

2 个答案:

答案 0 :(得分:1)

这意味着函数/变量strsep未正确初始化。它很可能是一个链接错误。它可能意味着您没有安装依赖项。您需要发布有关错误的更多信息。

顺便说一下,你不能在windows上运行linux二进制文件。

根据您的错误判断,您的编译器似乎不支持strsep函数。要解决这个问题,你可能需要编写自己的代码,如下所示:

char *strsep(char **from, const char *delim) {
    char *s, *dp, *ret;

    if ((s = *from) == NULL)
        return NULL;

    ret = s;
    while (*s != '\0') {
        /* loop until the end of s, checking against each delimiting character,
         * if we find a delimiter set **s to '\0' and return our previous token
         * to the user. */
        dp = (char *)delim;
        while (*dp != '\0') {
            if (*s == *dp) {
                *s = '\0';
                *from = s + 1;
                return ret;
            }
            dp++;
        }
        s++;
    }
    /* end of string case */
    *from = NULL;
    return ret;
}

以下是您需要完成的流程:

1-在src目录中找到文件f77_diagram.c。

2-在#include语句后立即复制并粘贴上述代码。

3-返回主make目录中的命令shell。

4-重新运行./configure

5-重新运行make

如果这不起作用,您可以尝试其他一些事项。

答案 1 :(得分:0)

MSYS为Windows提供类似Linux的构建环境。但是,Linux二进制文件使用ELF或A.OUT格式,而不是EXE格式。由于没有WINE for Windows,因此必须为Windows重新编译Linux二进制文件。