2012-05-28 95 views
4

我正在Linux平台上开始我的第一步。我已经安装了Centos x64。我试图用一些函数和几个单元测试来构建一个小程序。crt1.o没有这样的文件linux x64上的C++编译错误

我使用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位可执行文件,但我不应该认为这是一个问题(32个可执行文件可以创建在Windows上的x64平台上 - 我熟悉的平台)。

找到发现在以下地方crt1.o文件:

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

我不知道如果我错过了一个包,或者我应该创建一个符号链接。

回答

11

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

0

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

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

我建议你在32位库中构建32位二进制文​​件,并构建与64位库链接的64位二进制文​​件。

+0

我不同意你的看法。 Windows可以在任一平台上构建x64或x86可执行文件。因此,Linux平台也应该可以做到这一点。 – fishfood

+0

同样,这并不是Linux平台无法胜任的。假设这是不安全的。 Linux是一个平台,而不是一个开发工具(编译器/链接器)。所以当你发表声明时,你应该提及你所指的是哪些开发工具(编译器/链接器)。它是开发工具(例如Visual Studio),而不是具有32位和64位二进制文​​件的Windows。其他工具可能无法做到。 在Linux中,您甚至可以通过交叉编译生成Windows二进制文件,因为开发工具能够做到这一点。 –

2

我想ld正在寻找32位crt1.o,但你只有64位版本。

相关问题