我想在Windows上尝试在源代码中分发* nux的程序。这是一个简单的程序,有几个C源文件和标题
我有Mingw / Msys,我首先尝试通过运行make
来编译它,但不幸的是我得到了模糊的错误(.text+0x175): undefined reference to 'strsep'
,这可能表明autotools或类似的问题,谷歌搜索,但这就是我可以得到的
正如我提到它是一个简单的程序,我也尝试用VS2008编译它,直到我认为它使用unix头文件来解析命令行参数,所以我也无法做到这一点
我启动了我的Ubuntu笔记本电脑并在第二个程序中编译了程序,并且测试得很好,然后我在我的Windows Msys文件夹中复制了二进制文件。没有运气因为文件不能被执行(当然在Msys提示下) - 它没有执行标志,并且Msys上的chmod
有一个“功能”使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
答案 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二进制文件。