【问题标题】:crt1.o no such file c++ compilation error on linux x64crt1.o no such file c++ 在 linux x64 上编译错误
【发布时间】:2012-05-28 10:53:14
【问题描述】:

我正在 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 位可执行文件 - 我熟悉的平台)。

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

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

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

【问题讨论】:

    标签: c++ linux linker


    【解决方案1】:

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

    【讨论】:

      【解决方案2】:

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

      【讨论】:

        【解决方案3】:

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

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

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

        【讨论】:

        • 我不同意你的看法。 Windows 可以在任一平台上构建 x64 或 x86 可执行文件。由此可见,linux平台也应该能够做到这一点。
        • 再次强调,并不是Linux平台不行。假设是不安全的。 Linux 是一个平台,而不是一个开发工具(编译器/链接器)。因此,当您发表声明时,您应该提及您所指的开发工具(编译器/链接器)。它是开发工具(例如 Visual Studio),而不是能够支持 32 位和 64 位二进制文​​件的 Windows。其他工具可能做不到。在 Linux 中,您甚至可以通过交叉编译生成 Windows 二进制文件,因为开发工具能够做到这一点。
        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2023-03-12
        • 1970-01-01
        • 1970-01-01
        • 2014-07-26
        • 2017-03-08
        • 2021-06-05
        相关资源
        最近更新 更多