问题描述
我正在尝试为正在处理的特定问题创建共享库。它具有“ 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标志和代字字符之间放置一个空格,此错误消息就会消失。
原因是:如果-L和〜之间没有空格,则代字号字符不能扩展到主目录。