makefile 中指定程序运行时加载的库文件路径

时间:2022-01-14 12:51:38

1 问题描述

程序运行时,提示找不到库。
原因:默认运行加载的库路径为 /usr/lib

2 解决方法

2.1 方法一,设置PATH环境变量

如何在加入这些路径呢?以PATH变量为例。
一种方法是:直接在命令行下:
PATH=" PATH:/path/to/your/bin:/another/path/to/bin”
$ export PATH
这种方法的好处是方便,立即生效,缺点是把当前会话或shell关了之后就失效了,下次还得运行一遍。

2.2 方法二, 修改makefile,直接指定路径

另一种方法是:makefile 中增加运行程序的库文件路径
LDFLAGS+= -Wl,-Bstatic -lbt
LDFLAGS+= -Wl,-rpath=/opt/lib/
LDDIR+=-Lhost/libbt/lib
CC=/opt/toolchain/arm-2012.03/bin/arm-none-linux-gnueabi-gcc

编译指令:
(CC) (LDDIR) -o @ ^ $(LDFLAGS)

3 makefile 相关参数说明

CFLAGS 表示用于 C 编译器的选项,
CXXFLAGS 表示用于 C++ 编译器的选项。
这两个变量实际上涵盖了编译和汇编两个步骤。
先来看几个相关的环境变量:PATH、LDFLAGS、CFLAGS

LDFLAGS:gcc 等编译器会用到的一些优化参数,也可以在里面指定库文件的位置。用法:LDFLAGS=“-L/usr/lib -L/path/to/your/lib”。每安装一个包都几乎一定的会在安装目录里建立一个lib目录。如果你明明安装了某个包,而安装另一个包时,它愣是说找不到,那就把那个包的lib路径加入的LDFALGS中试一下。

CFLAGS:和LDFLAGS类似,只不过要向里加如的是头文件(.h文件)的路径,如:CFLAGS=“-I/usr/include -I/path/to/your/include”。同样地,安装一个包时会在安装路径下建立一个include目录,当安装过程中出现问题时,试着把以前安装的包的include目录加入到该变量中来。