c++ 编译 链接库文件

2021-03-04  本文已影响0人  无聊就搞科研

问题:从下载了c++ 的multinest库,安装好之后调试,发现一直找不到。

1. 熟悉环境变量,

修改环境变量PATH

PATH路径:告诉shell将到哪些目录中寻找命令或程序,PATH是一系列目录,当运行一个可执行程序时,Linux在这些目录下进行搜寻。
当安装了软件包(例如mathematica),需要输入命令直接执行时,可以把软件包的可执行文件目录添加到PATH路径,这样就可以在任何路径直接执行。
PATH格式:PATH=$PATH:<PATHnew1>:<PATHnew2>
添加环境变量的方式:
1.直接终端添加,只对本进程有效。终端关闭会失效。
2.用户家目录更改(只对本用户有效) ~/.bashrc 或者 ~/.profile, 更改完之后需要source ~/.bashrc
3 对所有用户都有效,在/etc/profile文件添加PATH。

LIBRARY_PATH环境变量用于在程序编译期间查找动态链接库时指定查找共享库的路径,例如,指定gcc编译需要用到的动态链接库的目录。

LD_LIBRARY_PATH环境变量用于在程序加载运行期间查找动态链接库时指定除了系统默认路径之外的其他路径,注意,LD_LIBRARY_PATH中指定的路径会在系统默认路径之前进行查找。

2. g++ 编译参数

首先g++ 编译可以跟的参数解释:
-l(小写L)
就是用来指定程序要链接的库,-l参数紧接着就是库名,lib+库名+.so
-L
按照L后面的路径进去寻找库文件
-I(大写i)
表示:编译程序按照-I指定的路进去搜索头文件。

3.解决问题

编译链接:
g++ a.cpp -L(.so路径) -I(头文件路径) -lmultinest
./a.out
编译成功了,但是运行a.out会报错.error while loading shared libraries: libmultinest.so.3.10: cannot open shared object file: No such file or directory
后来发现程序加载的时候也要找库文件,而运行的时候找的是默认的库文件。所以应该把这个库文件路径添加到环境变量LD_LIBRARY_PATH。添加好之后再编译链接就不会出问题了。
如果经常需要编译这个库,也可以把这个库的include路径,

上一篇下一篇

猜你喜欢

热点阅读