编译时无法将“ .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和〜之间没有空格,则代字号字符不能扩展到主目录。

相关问答

依赖报错 idea导入项目后依赖报错,解决方案:https://blog....
错误1:代码生成器依赖和mybatis依赖冲突 启动项目时报错如下...
错误1:gradle项目控制台输出为乱码 # 解决方案:https://bl...
错误还原:在查询的过程中,传入的workType为0时,该条件不起...
报错如下,gcc版本太低 ^ server.c:5346:31: 错误:‘struct...