编译时无法 link“.so”共享库到主“.c”文件

Unable to link ".so" shared library to main ".c" file while compiling

我正在尝试为我正在处理的特定问题创建一个共享库。它以“point_sense.c”作为主文件,使用“createPolygon.c”中定义的函数。这些函数在头文件“createPolygon.h”中声明。

为了编译它们,我使用了如下所示的 makefile


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 .

我试图在此处重现该问题,如果在 -L 标志和波浪字符之间放置 space,则此错误消息消失。

原因是:如果-L和~之间没有space,波浪字符不能扩展到主目录。