【问题标题】:Am I writing this makefile correctly?我正确地编写了这个makefile吗?
【发布时间】: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”做些什么吗?我该怎么办?

【问题讨论】:

标签: c linux ubuntu makefile


【解决方案1】:
-Wl, -rpath, /home/ahmed/Desktop/labTask3

去掉空格。这应该是一个很长的论点。

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

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

【讨论】:

  • 我去掉了空格,现在它说:/usr/bin/ld: cannot find -lmultshared.so collect2: error: ld returned 1 exit status make: *** [calc.exe ] 错误 1
  • @ahmedbatty 使用 -L 告诉 gcc 在哪里可以找到不在标准位置的库(例如,/lib/usr/lib)。您可以尝试-L. 告诉它在当前目录中查找。
猜你喜欢
  • 1970-01-01
  • 2012-10-02
  • 2022-10-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-10-08
相关资源
最近更新 更多