【发布时间】:2020-12-10 03:17:18
【问题描述】:
我正在尝试为我正在处理的特定问题创建一个共享库。它以“point_sense.c”作为主文件,使用“createPolygon.c”中定义的函数。这些函数在头文件“createPolygon.h”中声明。
为了编译它们,我使用了一个如下所示的生成文件
all:point_sense
createPolygon.o:createPolygon.c
g++ -c -fpic createPolygon.c
libcreatePolygon.so:createPolygon.o
g++ -shared -o libcreatePolygon.so createPolygon.o
point_sense:point_sense.c libcreatePolygon.so
g++ -o point_sense -L~Desktop/Summer_2020_linux/tutorials/cpp_practise point_sense.c -lcreatePolygon
clean:
rm point_sense createPolygon.o libcreatePolygon.so
但是当我制作文件时,它会给出一个输出
g++ -c -fpic createPolygon.c
g++ -shared -o libcreatePolygon.so createPolygon.o
g++ -o point_sense -L~Desktop/Summer_2020_linux/tutorials/cpp_practise point_sense.c -lcreatePolygon
/usr/bin/ld: cannot find -lcreatePolygon
collect2: error: ld returned 1 exit status
make: *** [makefile:10: point_sense] Error 1
最初我认为这是一个愚蠢的错误,并检查我使用了
ld -L~/Desktop/Summer_2020_linux/tutorials/cpp_practise -lcreatePolygon -verbose
经过长时间的输出后,我得到了(代码中一些不重要的行被跳过)
ld: mode elf_x86_64
attempt to open ~/Desktop/Summer_2020_linux/tutorials/cpp_practise/libcreatePolygon.so failed
attempt to open ~/Desktop/Summer_2020_linux/tutorials/cpp_practise/libcreatePolygon.a failed
attempt to open /usr/local/lib/x86_64-linux-gnu/libcreatePolygon.so failed
attempt to open /usr/local/lib/x86_64-linux-gnu/libcreatePolygon.a failed
.
.
.
ld: cannot find -lcreatePolygon
但是当我尝试直接打开“libcreatePolygon.so”时,我可以打开它。
$ nano ~/Desktop/Summer_2020_linux/tutorials/cpp_practise/libcreatePolygon.so
有几个threads 解释了这样做的过程,但我不明白我做错了什么。任何帮助表示赞赏。 我正在使用 Ubuntu 20.04.1 LTS 和 g++ (Ubuntu 9.3.0-10ubuntu2) 9.3.0。
【问题讨论】:
-
您不应该在构建脚本中使用绝对路径(如 Makefile),因此请尝试使用
-L .或类似的。
标签: compilation g++ shared-libraries dynamic-linking .so