gpt4 book ai didi

gcc - MinGW编译 "file not recognized: File format not recognized"

转载 作者:行者123 更新时间:2023-12-02 08:34:43 27 4
gpt4 key购买 nike

我正在尝试编译 C++ 程序,但遇到一些问题。特别是,当我使用 x86_64-w64-mingw32-gcc 作为编译器时,它在编译过程中提示“tmp/src/libfastms/solver/solver.cpp.o: 文件无法识别:文件格式无法识别”。

这是我的 makefile(不是我的,我正在尝试使这个 makefile 适应 cygwin 环境)https://pastebin.com/vgnVYJUL

这是我运行 make 时的控制台输出:

x86_64-w64-mingw32-gcc -c -o tmp/src/libfastms/solver/solver.cpp.o src/libfastms/solver/solver.cpp  -Wall -O3 -m64  -Isrc/libfastms  -DDISABLE_OPENMP -DDISABLE_OPENCV -DDISABLE_CUDA
x86_64-w64-mingw32-gcc -c -o tmp/src/libfastms/solver/solver_base.cpp.o src/libfastms/solver/solver_base.cpp -Wall -O3 -m64 -Isrc/libfastms -DDISABLE_OPENMP -DDISABLE_OPENCV -DDISABLE_CUDA
x86_64-w64-mingw32-gcc -c -o tmp/src/libfastms/solver/solver_host.cpp.o src/libfastms/solver/solver_host.cpp -Wall -O3 -m64 -Isrc/libfastms -DDISABLE_OPENMP -DDISABLE_OPENCV -DDISABLE_CUDA
x86_64-w64-mingw32-gcc -c -o tmp/src/libfastms/util/has_cuda.cpp.o src/libfastms/util/has_cuda.cpp -Wall -O3 -m64 -Isrc/libfastms -DDISABLE_OPENMP -DDISABLE_OPENCV -DDISABLE_CUDA
x86_64-w64-mingw32-gcc -c -o tmp/src/libfastms/util/image_mat.cpp.o src/libfastms/util/image_mat.cpp -Wall -O3 -m64 -Isrc/libfastms -DDISABLE_OPENMP -DDISABLE_OPENCV -DDISABLE_CUDA
ld -r -o tmp/src/libfastms/libfastms.o tmp/src/libfastms/solver/solver.cpp.o tmp/src/libfastms/solver/solver_base.cpp.o tmp/src/libfastms/solver/solver_host.cpp.o tmp/src/libfastms/util/has_cuda.cpp.o tmp/src/libfastms/util/image_mat.cpp.o
tmp/src/libfastms/solver/solver.cpp.o: file not recognized: File format not recognized
Makefile:167: recipe for target 'tmp/src/libfastms/libfastms.o' failed
make: *** [tmp/src/libfastms/libfastms.o] Error 1

其他一些注意事项:

  • 我用g++编译时没有这个问题(好像只有minGW)
  • 此问题的常见解决方案是清除残留目标文件的目录。这是行不通的。
  • 另一个常见原因是尝试编译 .h 文件。显然我不会这样做。

提前致谢。

最佳答案

您正在使用 64 位编译器驱动程序 w64-mingw32-gcc 编译目标文件,并且使用 -m64 您可以明确指示它生成 64 位代码(不必要,因为这是它的默认值)。但您正在链接的 32 位链接器不支持了解 64 位目标文件。

发生这种情况是因为在您的 makefile 中,您异常地调用了 ld显式地用于增量求解器链接:

COMMAND_LINK_SOLVER=ld -r -o $@ $^

而不是以通常的方式将链接委托(delegate)给编译器驱动程序,并且之前在您的 PATH 中找到了来自不同工具链的 32 位 ld属于您的 mingw-w64 工具链的 64 位工具。

为了避免这种情况,请像平常一样通过编译器驱动程序调用链接器,这对于您来说solver链接方式:

COMMAND_LINK_SOLVER=$(GXX) -Wl,-r -o $@ $^

您可以依赖 w64-mingw32-gcc 来调用随其安装的 ld

无需更正您的 main 链接,因为它已经以正确的方式完成。

关于gcc - MinGW编译 "file not recognized: File format not recognized",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44477951/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com