如何使用共享库

时间:2014-03-17 05:57:57

标签: gcc centos shared-libraries ld

这些是我的C代码,只需打印“Hello"信息。我想将mylib.c作为共享库。

[mylib.c]

#include <stdio.h>
int mylib();
int main(){
        mylib();
        return 0;
}
int mylib(){
        printf("### Hello I am mylib #####\n");
        return 0;
}

[drive.c]

#include <stdio.h>
int mylib();
int main(){
        mylib();
        return 0;
}

在最火的时候,我使用下面的命令行编译mylib.c来制作mylib.o

gcc –fPIC –g –c –Wall mylib.c 

然后试图像这样将它共享为

 gcc -shared -Wl,-soname,libmylib.so.1 -o /opt/lib/libmylib.so.1.0.1 mylib.o -lc

我做ldconfig更新/etc/ld.so.cache

最后我用mylib编译了drive.c链接但链接器显示错误

gcc -g -Wall -Wextra -pedantic  -I./ -L./ -o drive drive.c –lmylib

/usr/bin/ld: cannot find –lmylib

有人告诉我如何编译它?

2 个答案:

答案 0 :(得分:0)

在我的方式中,您必须遵循一些方法在C中使用共享库。

首先,我创建了一个名为&#34; shared_library.h&#34;的头文件,在这个文件中我引入了一个名为&#34; method&#34;的函数。作为这个库的一个功能。

代码如下:

/*-------This is starting of shared_library.h file-----------*/
void method();
/*-------------This is ending of shared_library.h file--------*/

然后我在另一个名为&#34; shared_library.c&#34;的文件中定义了该方法。代码中的定义是:

/*-------------This is starting of shared_library.c file---------*/
#include "shared_library.h"
void method()
{
    printf("Method is called");
}
/*-------------This is ending of shared_library.c file---------*/

最后,标题&#34; shared_library.h&#34;准备好了。我在名为&#34; main.c&#34;的主C文件中使用该库。 &#34; main.c&#34;的内容如下:

/*-------------This is starting of main.c file----------------*/
#include <stdio.h>
#include "shared_library.h"
int main()
{
    method();
    return 0;
}
/*-------------This is ending of main.c file----------------\*/

答案 1 :(得分:0)

我发现了这篇文章ld cannot find an existing library

如果我更改为gcc -g -Wall -Wextra -pedantic -I./ -L/opt/lib -o drive drive.c –l:libmylib.so.1

,则有效