2012-05-28 96 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位版本。

相關問題