我正在学习如何在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”做些什么吗?我该怎么办?
答案 0 :(得分:3)
-Wl, -rpath, /home/ahmed/Desktop/labTask3
摆脱空间。这应该是一个很长的争论。
-Wl,-rpath,/home/ahmed/Desktop/labTask3
有关使用-Wl
将参数传递给链接器的详细说明,请参阅this excellent answer by @KerrekSB。