我正在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位可执行文件 - 我熟悉的平台)。 / p>
Locate在以下位置找到crt1.o文件:
locate crt1.o
/usr/lib64/Mcrt1.o
/usr/lib64/Scrt1.o
/usr/lib64/crt1.o
/usr/lib64/gcrt1.o
我不确定我是否错过了一个包,或者我是否应该创建一个符号链接。
答案 0 :(得分:12)
您需要安装32位标准C库开发包。它可能被命名为libc6-dev-i386
。
答案 1 :(得分:2)
我认为ld正在寻找32位crt1.o,但你只有64位版本。
答案 2 :(得分:0)
你找不到crt1.o的问题可能是因为你缺少一个库说明符选项。我不熟悉Netbeans,但你应该添加/ usr / lib64。 在g ++命令行的某处,它应该如下所示:“ - L / usr / lib64”。
注意:假设因为它在Windows上以这种方式工作,这是一个思维缺陷,具有相同CPU的其他平台将以相同的方式运行。这听起来不对。
我建议您使用32位库构建32位二进制文件,并构建与64位库链接的64位二进制文件。