Makefile 可以在 Windows 上的 Cygwin 中工作,但在 Ubuntu 上却不能。

3
我在git仓库中有以下文件夹:https://github.com/ryu577/base/tree/master/numerical/c/NumericalRecipiesCode/lib 在我安装了cygwin的Windows机器上,可以在该目录下运行make命令,触发如下命令:
gcc -o ../bin/lib/tst_libfns ../obj/nrutil.o ../obj/fileio.o ../obj/tst_libfns.o -I ../include -lm

这将把tst_libfns.o和fileio.o放在obj目录中。

现在,我将该存储库拉到我的Ubuntu机器上并尝试了同样的操作。然而,当在那里生成相同的命令时,它会给我以下错误:

gcc -o ../bin/lib/tst_libfns ../obj/nrutil.o ../obj/fileio.o ../obj/tst_libfns.o -I../include -lm
../obj/fileio.o:fileio.c:(.text+0x52): undefined reference to `__getreent'
../obj/tst_libfns.o:tst_libfns.c:(.text+0x10): undefined reference to `__main'
collect2: error: ld returned 1 exit status
make: *** [../bin/lib/tst_libfns] Error 1

我是不是漏掉了什么显而易见的东西?

1个回答

3

我刚刚弄明白了。我通过git在obj目录中拉入了.o文件,而gcc似乎正在尝试使用现有的文件(这些文件是在Cygwin + Windows中生成的)。不知何故,这些.o文件似乎与Linux不兼容。当我删除它们并再次运行make命令时,.o文件被重新生成了。我想这个故事的寓意就是,在Windows中由GCC生成的二进制文件和可执行文件与Linux不兼容(我猜反之亦然)。


肯定它们是不兼容的。你不能在Windows上运行Mac程序,在Linux上运行Windows程序,在Mac上运行Linux程序等(至少没有安装“伪造”兼容性的特殊软件)。此外,您永远不应该将目标文件和二进制文件提交到您的源代码控制系统(如git)中:源代码控制系统是用于源代码的。 - MadScientist

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接