6

我正在 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

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

4

3 回答 3

12

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

于 2012-05-28T10:57:59.980 回答
2

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

于 2012-11-29T13:17:06.107 回答
0

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

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

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

于 2012-05-28T11:04:41.613 回答