crt1.o Linux x64 上没有这样的文件 C++ 编译错误

crt1.o no such file c++ compilation error on linux x64

本文关键字:文件 C++ 错误 编译 Linux x64 crt1      更新时间:2023-10-16

我正在Linux平台上迈出第一步。 我已经安装了 Centos x64。 我正在尝试构建一个包含几个函数和几个单元测试的小程序。

我使用 Netbeans 7.1.2 作为开发环境。

以下是构建过程的输出:

CLEAN SUCCESSFUL (total time: 671ms)
"/usr/bin/gmake" -f nbproject/Makefile-Debug.mk QMAKE= SUBPROJECTS= .build-conf
gmake[1]: Entering directory `/home/john/Dev/GoatsCheese'
"/usr/bin/gmake"  -f nbproject/Makefile-Debug.mk dist/Debug/GNU-Linux-x86/goatscheese
gmake[2]: Entering directory `/home/john/Dev/GoatsCheese'
mkdir -p build/Debug/GNU-Linux-x86
rm -f build/Debug/GNU-Linux-x86/main.o.d
g++ -m32   -c -g -I/usr/include/cppunit -MMD -MP -MF build/Debug/GNU-Linux-x86/main.o.d -o build/Debug/GNU-Linux-x86/main.o main.cpp
mkdir -p dist/Debug/GNU-Linux-x86
g++ -m32    -o dist/Debug/GNU-Linux-x86/goatscheese build/Debug/GNU-Linux-x86/main.o  
/usr/bin/ld: crt1.o: No such file: No such file or directory
collect2: ld returned 1 exit status

编译器设置为创建 32 位可执行文件,但我不应该认为这会是一个问题(可以在 Windows 上的 x64 平台上创建 32 位可执行文件 - 我熟悉的平台)。

查找在以下位置查找 crt1.o 文件:

locate crt1.o
/usr/lib64/Mcrt1.o
/usr/lib64/Scrt1.o
/usr/lib64/crt1.o
/usr/lib64/gcrt1.o

不确定我是否缺少包或是否应该创建一个符号链接。

您需要安装 32 位标准 C 库开发包。它可能被命名为类似 libc6-dev-i386 .

我认为 ld 正在寻找 32 位 crt1.o,但您只有 64 位版本。

找不到 crt1.o 的问题可能是因为您缺少库说明符选项之一。我不熟悉 Netbeans,但您应该添加/usr/lib64。在 g++ 命令行中的某个地方,它应该看起来像:"-L/usr/lib64"。

注意:假设因为它以这种方式在Windows上运行,所以具有相同CPU的其他平台将以相同的方式运行,这是一个思维缺陷。这听起来不对。

我建议您使用 32 位库构建 32 位二进制文件,并构建链接到 64 位库的 64 位二进制文件。