2014-02-20 258 views
2

我正在學習如何在Linux中編寫C代碼,並且正在學習初學者級別的makefile。 我在製作共享庫時遇到問題。我是否正確編寫這個makefile?

演習是做一個簡單的計算器功能的C程序與文件:

main.c 
add.c 
subt.c 
mult.c 
div.c 

的文件的名稱來定義他們的功能。 在文件subt.c功能是靜態庫:

libsubstatic.a 

在文件mult.c功能是在共享庫:

libmultshared.so 

對於這個程序,我寫的以下生成文件:

calc.exe: main.o add.o div.o libsubstatic.a libmultshared.so 
gcc -o calc.exe main.o add.o div.o libsubstatic.a -Wl,-rpath,/home/ahmed/Desktop/labTask3 -lmultshared.so 

main.o: main.c header.h 
gcc -c main.c 

add.o: add.c header.h 
gcc -c add.c 

libsubstatic.a: subt.o 
ar cr libsubstatic.a subt.o 

subt.o: subt.c header.h 
gcc -c subt.c 

libmultshared.so: mult.o 
gcc -shared -fPIC -o libmultshared.so mult.o 

mult.o: mult.c header.h 
gcc -c -fPIC mult.c 

div.o: div.c header.h 
gcc -c div.c 

在碼和生成文件被放置在路徑:

/home/ahmed/Desktop/labTask3 

我收到以下消息後,我在終端輸入「make」:

gcc -o calc.exe main.o add.o div.o libsubstatic.a -Wl, -rpath, /home/ahmed/Desktop/labTask3 -lmultshared.so 
gcc: error: unrecognized command line option ‘-rpath,’ 
make: *** [calc.exe] Error 1 

我缺少什麼?我是否正確編寫了這個makefile? 請解釋共享庫,我的概念可能是錯誤的。

請幫忙。

請注意,我是linux新手,並且沒有太多makefile的經驗。

編輯:我刪除了第一個答案指示的空間。現在終端說:

gcc -o calc.exe main.o add.o div.o libsubstatic.a -Wl,-rpath,/home/ahmed/Desktop/labTask3 -lmultshared.so 
/usr/bin/ld: cannot find -lmultshared.so 
collect2: error: ld returned 1 exit status 
make: *** [calc.exe] Error 1 

我應該對「-lmultshared.so」做些什麼嗎?我該怎麼辦?

+0

請參閱[此示例](http://stackoverflow.com/a/20146082/841108)'Makefile'' –

回答

3
-Wl, -rpath, /home/ahmed/Desktop/labTask3 

擺脫空間。這應該都是一個長期的論點。

-Wl,-rpath,/home/ahmed/Desktop/labTask3 

約傳遞參數給連接器與-Wl詳細說明見this excellent answer by @KerrekSB

+0

我擺脫了空間,它現在說: /usr/bin/ld:找不到-lmultshared .so collect2:錯誤:ld返回1退出狀態 make:*** [calc.exe]錯誤1 – ahmedbatty

+0

@ahmedbatty如果不在標準位置,使用'-L'告訴gcc如何找到庫例如'/ lib','/ usr/lib')。您可以嘗試使用'-L.'來告訴它查看當前目錄。 –