我正确地写这个makefile了吗?

时间:2014-02-20 18:29:59

标签: c linux ubuntu makefile

我正在学习如何在Linux中编写C代码,我正在学习初学者级别的makefile。 我在制作共享库时遇到了问题。

练习是用文件制作一个简单的函数计算器C程序:

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

文件名定义了他们所做的功能。 文件subt.c中的函数位于静态库中:

libsubstatic.a

文件mult.c中的函数位于共享库中:

libmultshared.so

对于这个程序,我编写以下makefile:

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

放置代码和makefile的路径:

/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”做些什么吗?我该怎么办?

1 个答案:

答案 0 :(得分:3)

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

摆脱空间。这应该是一个很长的争论。

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

有关使用-Wl将参数传递给链接器的详细说明,请参阅this excellent answer by @KerrekSB