【发布时间】:2014-03-21 21:49:28
【问题描述】:
我正在学习如何在 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”做些什么吗?我该怎么办?
【问题讨论】:
-
见this example
Makefile