make時,會跳過一些incompatible的檔案 - Linux

Table of Contents

以下是我們助教給的makefile
-------------------------------------------
all: Lab5

CXX = g++

OFLAGS = -pedantic -Wall -fomit-frame-pointer -funroll-all-loops -O3 -DNDEBUG

LINKFLAGS = -static

Lab5: main.o parser.o
$(CXX) $(LINKFLAGS) main.o parser.o -o Lab5 -L lib -l3rdFlute2_5

main.o: main.cpp algo.h
$(CXX) $(LINKFLAGS) -DCOMPILETIME="\"`date`\"" main.cpp -c

parser.o: parser.cpp parser.h
$(CXX) $(LINKFLAGS) parser.cpp -c

clean:
rm -rf *.o *.gch Lab5
------------------------------------------------------------------
問題:
這個makefile在實驗室的工作站跑沒有問題
如果在我自己新裝的ubuntu 10.04上跑,會出現以下的錯誤

( l3rdFlute2_5 第一個字母是L小寫 )
g++ -static main.o parser.o -o Lab5 -L lib -l3rdFlute2_5

/usr/bin/ld: skipping incompatible lib/lib3rdFlute2_5.a when searching
for -l3rdFlute2_5

/usr/bin/ld: cannot find -l3rdFlute2_5

collect2: ld return 1 exit status
make: *** [Lab5] Error 1

而助教給的資料夾裡面,有一個"lib"資料夾,裡面有兩個檔案
lib3rdFlute2_5.a lib3rdFlute3.a

另外,在碰到這個問題之前,有另一個情況是
在 include <string> 後,strcpy沒辦法compile過
我加了一行 include<string.h> 才沒這個問題,是否我有東西沒安裝齊全= =?

第一次接觸linux,請多指教。








--

All Comments

Andy avatarAndy2010-06-08
你的系統和lib file可能一個是32-bit另一個是64-bit
Selena avatarSelena2010-06-13
http://bit.ly/9gIWt8 結論應該是裝32-bit lib, CFLAGS加 -m32
Adele avatarAdele2010-06-15
應該是 include cstring, not string
Skylar DavisLinda avatarSkylar DavisLinda2010-06-17
恩,我再試試,謝謝^^
Ida avatarIda2010-06-19
確實是64bit的東西= =