动态so库的链接:运行时链接和编译时链接 您所在的位置:网站首页 动态库链接方式 动态so库的链接:运行时链接和编译时链接

动态so库的链接:运行时链接和编译时链接

2023-12-09 02:55| 来源: 网络整理| 查看: 265

      在编写Makefile时,如果一个程序需要链接so库,则需要通过两个步骤来完成,分为运行时动态库的链接和编译时动态库的链接,缺一不可。

       

1、运行时动态库的链接

在执行可执行文件时,提示:

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

解决:有三种方法

1)将 libprint.so放入系统库或用户库目录下: sudo cp libprint.so /usr/local/lib sudo ldconfig 2)在makefile中添加: -Wl,-rpath LDFLAGS = -lm -lprint -L$(TOP_PATH)/lib -Wl,-rpath=$(TOP_PATH)/lib

说明: gcc编译链接动态库时,很有可能编译通过但是执行时,找不到动态链接库,那是因为-L选项指定的路径只在编译时有效,编译出来的可执行文件不知道-L选项后面的值,当然找不到。 解决方法是通过-Wl,rpath=,使得execute记住链接库的位置

3)使用LD_LIBRARY_PATH

推荐使用方法一。

2、编译时链接 LDFLAGS

链接器参数,如指定库位置:

LDFLAGS=-L/usr/lib -L/path/to/your/lib

LIBS告诉链接器要链接哪些库文件,如:

LIBS = -lpthread -liconv 最正规的做法: LDFLAGS = -L/var/xxx/lib -L/opt/mysql/lib -lmysqlclient -liconv

因为LIBS不是makefile的自带变量,属于用户自定义变量。



【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有