Nav*_*K N 3 c gcc shared-libraries
我正在尝试使用GCC在linux上学习共享库概念.所以我创建了一个简单的库.
LIBRARY.C
int foo(void) {
return 10;
}
Run Code Online (Sandbox Code Playgroud)
这是使用编译的,
cc -fPIC -g -c library.c
cc -shared -fPIC -Wl,-soname,libmytest.so.1 -o libmytest.so.1.0.1 library.o -lc
Run Code Online (Sandbox Code Playgroud)
它libmytest.so.1.0.1在当前目录中创建了该文件.现在我正在编写一个客户端来在同一目录中使用这个库.
client.c
#include <stdio.h>
extern int foo(void);
int main()
{
int a = foo();
printf("a is %d", a);
return 0;
}
Run Code Online (Sandbox Code Playgroud)
编译使用,
cc client.c -o client -lmytest
Run Code Online (Sandbox Code Playgroud)
但这会随着消息退出
/usr/bin/ld: cannot find -lmytest
collect2: ld returned 1 exit status
Run Code Online (Sandbox Code Playgroud)
谁能帮助我找出我在这里做错了什么?
尝试使用一个-L选项,该选项用于将目录添加到搜索-l选项的目录列表中:
cc client.c -L. -o client -lmytest
Run Code Online (Sandbox Code Playgroud)
假设.so它存在于同一目录中client.c.如果没有添加合适的路径.
看到的链接器-lmytest查找libmytest.so但是您附加了一个版本号,因此它不起作用.修复此问题的方法是创建一个名为libmytest.so指向的符号链接libmytest.so.1.0.1
ln -s libmytest.so.1.0.1 libmytest.so
Run Code Online (Sandbox Code Playgroud)
或者,您可以在编译/链接行上使用完整的库名称:
cc client.c ./libmytest.so.1.0.1 -o client
Run Code Online (Sandbox Code Playgroud)