当前位置: 首页 > C, C/C++ > 正文

How to make Shared Library and Static Library With GCC on Linux

前言

今天做一个修改Glibc 源码的需求的时候,我想到了使用动态库的方式完成我的目的。但是我很久之前做过相关的东西,现在忘了,遂上百度,谷歌再次学习,正好总结下,以防后边忘记。

首先

我们的函数:

cac_test.h

double  test(double a,double b);

cac_test.cpp

double  test(double a,double b){

return (A+B)/2;

}

main.c

int main( ){

double A,B,C;

A = 1;

B = 10;

double C = test(A,B);

printf(“c=  %f\n”,c);

}

STEP1:

We need to compile our library source code into position-independent code (PIC)

我们首先要让它变成地址无关代码(地址无关,不明白,请自行百度)

gcc -c -Wall -Werror -fpic cac_test.c

STEP2:

Now we need to actually turn this object file into a shared library. We’ll call it libcac.so

现在我们需要将它变成一个共享库,我们叫他libcac.so

gcc -shared -o libfoo.so libcac.so

STEP3:

Linking with a shared library

链接共享库与我们的主函数

gcc -Wall -o test main.c -L libcac.so

Ps: 可能会找不到这个共享库,这时候我们需要告诉GCC去查找共享库

gcc -L/home/libcac.so -Wall -o test main.c

STEP4:

执行我们的结果:./test

如果报出这样的错误:

/test: error while loading shared libraries: libfoo.so: cannot open shared object file: No such file or directory

我们可以通过设置环境变量来指定它的寻找路径

LD_LIBRARY_PATH=/home/username/cac_test.so:$LD_LIBRARY_PATH

export LD_LIBRARY_PATH=/home/username/cac_test.so:$LD_LIBRARY_PATH

这样就OK了

另一种方法:

将我们的动态库移动到/usr/lib 中去,并且给与权限,执行ldconfig来重新扫描动态库,建立一个连接关系。

cp /home/username/libcac_test.so /usr/lib      /*注意这里必须改成lib开头的文件了,很简单前面的语句修改下就好了*/
chmod 0755 /usr/lib/libcac_test.so

ldconfig  扫描动态库,建立连接关系

然后就很简单了这样:

gcc -Wall -o test main.c libcac_test.so

然后就成了,注意,当你前边所有东西都完成还是出错的话,请直接写上绝对路径

本文固定链接: http://zmrlinux.com/2016/03/16/how-to-make-shared-library-and-static-library-with-gcc-on-linux/ | Kernel & Me

该日志由 root 于2016年03月16日发表在 C, C/C++ 分类下, 你可以发表评论,并在保留原文地址及作者的情况下引用到你的网站或博客。
原创文章转载请注明: How to make Shared Library and Static Library With GCC on Linux | Kernel & Me