1

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

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

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

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


更新:

这是我在尝试编译时从 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
4

2 回答 2

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。

#include2- 在语句之后复制并粘贴上面的代码。

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

4-重新运行./configure

5-重新运行make

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

于 2012-06-13T20:35:21.943 回答
0

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

于 2017-04-09T19:03:23.993 回答