GCC生成动态库
文件目录组织
src |--mmath.c |--mmath.h |--app.c |--makefile
mmath.h文件内容
#pragma once int add(int a,int );
mmath.c文件内容
#include <stdio.h> int add(int a,int b){ return a + b; }
app.c文件内容
#include <stdio.h> #include "mmath.h" int main() { int x = add(3,4); printf("3 + 4 = %d\n",x); }
mingw下makefile内容
app : app.c gcc -o $@ $^ -L. -lmmath mmath : mmath.c gcc -shared -o $@.dll $^ -Wl,--out-implib,$@.lib
mingw下执行
user@host MINGW64 /d/git/mmath/ (dev) $ make mmath gcc -shared -o mmath.dll mmath.c -Wl,--out-implib,mmath.lib user@host MINGW64 /d/git/mmath/ (dev) $ make gcc -o app app.c -L. -lmmath user@host MINGW64 /d/git/mmath/ (dev) $ ./app.exe 3 + 4 = 7 user@host MINGW64 /d/git/mmath/ (dev) $ ls app.c app.exe* makefile mmath.c mmath.dll* mmath.h mmath.lib
ubuntu下makefile
app : app.c gcc -o $@ $^ -L. -lmmath mmath : mmath.c gcc -shared -o lib$@.so $^ clean: rm -rf app rm -rf lib*
ubuntu下执行
user@host:~/mmath$ make mmath gcc -fPIC -shared -o libmmath.so mmath.c user@host:~/mmath$ make gcc -o app app.c -L./ -lmmath user@host:~/mmath$ ./app ./app: error while loading shared libraries: libmmath.so: cannot open shared object file: No such file or directory
这个时候会报错说找不到libmmath.so,那么gcc是如何查找动态链接库的呢?
l 如果安装在/lib或者/usr/lib下,那么ld默认能够找到,无需其他操作。
l 如果安装在其他目录,需要将其添加到/etc/ld.so.cache文件中,步骤如下:
n 编辑/etc/ld.so.conf文件,加入库文件所在目录的路径
n 运行ldconfig ,该命令会重建/etc/ld.so.cache文件
下面修改makefile添加install,将创建的动态库复制到/usr/lib下面,然后运行测试程序。
app : app.c gcc -o $@ $^ -L. -lmmath mmath : mmath.c gcc -shared -o lib$@.so $^ install : cp libmmath.o /usr/lib/ clean: rm -rf app rm -rf lib*
再次执行,成功了!
user@host:~/mmath$ make clean rm -rf app rm -rf lib* user@host:~/mmath$ make mmath gcc -fPIC -shared -o libmmath.so mmath.c user@host:~/mmath$ sudo make install cp libmmath.so /usr/lib/ user@host:~/mmath$ make gcc -o app app.c -L./ -lmmath user@host:~/mmath$ ./app 3 + 4 = 7 user@host:~/mmath$
作者 :秋时
本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接。