如何解决编译时无法将“ .so”共享库链接到主“ .c”文件
我正在尝试为正在处理的特定问题创建共享库。它具有“ 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和〜之间没有空格,则代字号字符不能扩展到主目录。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。