crt1.o Linux x64 上没有这样的文件 C++ 编译错误
crt1.o no such file c++ compilation error on linux x64
我正在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 位二进制文件。
相关文章:
- .cpp和.h文件中的模板专用化声明
- 为什么两个不同的未命名名称空间可以共存于一个cpp文件中
- 文本文件中的单词链表
- CMake-按正确顺序将项目与C运行时对象文件链接
- 使用新行和不使用新行读取文件
- 在C++程序中输入的文本文件将不起作用,除非文本被复制和粘贴
- 挂起和取消挂起一个文件DLL
- 如何确定我已使用非编码文件到达 EOF?
- 命名空间中具有.h和.cpp文件的类
- 如何使用ndk-build.cmd构建Android.so文件
- 从包含m行的文件中提取n行,必要时(惰性地)重复该文件
- 读取文件并输入到矢量中
- 在C++中查找文件
- c++库的公共头文件中应该包含什么
- 用c++从输入文件中读取另一行
- Cppcheck生成xml转储文件
- 读取文件的最后一行并输入到链接列表时出错
- 无法编译 rtmidi 测试 cmidiin.cpp 文件, 非法指令
- 如何将内容数组写入文本文件?
- C++ Windows 驱动程序MSB3030无法复制该文件,因为它找不到