C 创建简单的共享库
我正在尝试使用GCC学习linux上的共享库概念。所以我创建了一个简单的库 图书馆c 这是使用C 创建简单的共享库,c,gcc,shared-libraries,C,Gcc,Shared Libraries,我正在尝试使用GCC学习linux上的共享库概念。所以我创建了一个简单的库 图书馆c 这是使用 cc -fPIC -g -c library.c cc -shared -fPIC -Wl,-soname,libmytest.so.1 -o libmytest.so.1.0.1 library.o -lc 它在当前目录中创建了文件libmytest.so.1.0.1。现在,我正在编写一个客户端来使用同一目录中的这个库 客户c 但这是一条信息 /usr/bin/ld: cannot find -l
cc -fPIC -g -c library.c
cc -shared -fPIC -Wl,-soname,libmytest.so.1 -o libmytest.so.1.0.1 library.o -lc
它在当前目录中创建了文件libmytest.so.1.0.1
。现在,我正在编写一个客户端来使用同一目录中的这个库
客户c
但这是一条信息
/usr/bin/ld: cannot find -lmytest
collect2: ld returned 1 exit status
有人能帮我找出我做错了什么吗?尝试使用
-L
选项,该选项用于将目录添加到搜索-L
选项的目录列表中:
cc client.c -L. -o client -lmytest
假设.so
与client.c
位于同一目录中。如果没有,添加合适的路径
查看-lmytest
时的链接器会查找libmytest.so
,但您在其中附加了一个版本号,因此它无法工作。解决此问题的方法是创建一个名为libmytest.so
的符号链接,指向libmytest.so.1.0.1
ln -s libmytest.so.1.0.1 libmytest.so
或者,您可以在编译/链接行上使用完整的库名称,如下所示:
cc client.c ./libmytest.so.1.0.1 -o client
链接器通常只在系统路径中搜索库。将
-L
传递到gcc
以指定要搜索的其他路径。您缺少-Ldir选项
从GCC手册页:
如果尝试运行可执行文件,还需要指定共享库的位置,否则将找不到该库。这可以通过以下方式实现:
LD_库_路径=/客户机
编辑:
谢谢,但是运气不好。还是一样 错误。我甚至试过用它 完整的路径,但不起作用
我认为链接器需要库具有.so扩展。请尝试
ln-s libmytest.so.1.0.1 libmytest.so
并查看它是否链接。谢谢,但运气不好。还是一样的错误。我甚至尝试过指定完整路径,但没有成功。我通过直接提供库名而不是通过-l来实现。请问您为什么要使用-soname,libmytest.so.1
?@codaddict:我猜是cargo cult coding。@codaddict:我发现其中一个教程说“-soname,libmytest.so.1”。正确的方法是什么?作为每次运行可执行文件时设置LD\u LIBRARY\u PATH
的替代方法,您可以在链接可执行文件时设置LD\u run\u PATH
,这将在可执行文件中嵌入共享库的附加搜索路径。
cc client.c -L. -o client -lmytest
ln -s libmytest.so.1.0.1 libmytest.so
cc client.c ./libmytest.so.1.0.1 -o client
-Ldir Add directory dir to the list of directories to be searched for -l.