首页 > 编程知识 正文

linux系统官网,ubuntu添加永久静态路由

时间:2023-05-04 05:48:04 阅读:38928 作者:3745

发现这个问题,还是在报告bug好几天之后,请求了很多人的支持。 最后一个个人问题是,为什么给出路径,生成. SO没有问题,调用. SO有问题,报告各种错误都找不到函数,或者还没有定义,所以将缺少的*.so放在/lib或/usr/lib中--- linux动态链接库的加载顺序。

linux动态链接库加载顺序:

有五个地方

1 .编译时指定的运行路径

2. LD_LIBRARY_PATH指定的位置

3. ldconfig指定的位置

4. /lib

5. /usr/lib

其他说明:

pos1可以通过readelf-d测试看到[rpath]libraryrpath:[pos1]

pos2必须用LD_LIBRARY_PATH说明。 本示例为: export LD _ library _ path=./pos 2

pos3必须在/etc/ld.so.conf中指定。 此示例为:/home/hjj/mytest/temp/pos 3

然后,ldconfig生成缓存以使设置生效。

pos4系统目录/lib

pos5系统目录/usr/lib

原文链接: 3359 blog.csdn.net/he jinjing _ Tom _ com/article/details/52454478

报告错误,例如:

# Path

DARKNET_PATH?=./darknet

MOT_DEEPSORT_PATH?=./tracker

# OPENCV_PATH?=./././opencv-4.0.1

OPENCV_PATH?=/usr/local/opencv3.4.7 #@WP

#公共定义

GCC?=g -g

NV抄送?=$(cuda_path )/lhdxmy/nvcc

cflags :=-fpic-STD=c11-lstdcfs-wall-o0-w unused-function-w unused-variable

nvcc flags 3360=---- compiler-options '-fpic-wall-o0-STD=c11-mavx-MAV x2 '-STD=c11-lstdcfs

#公共包含和路径

INCLUDES =-I$(DARKNET_PATH )/include

INCLUDES =-I$(MOT_DEEPSORT_PATH )/include

includes=-I/usr/local/opencv3.4.7/include/opencv # @ WP

includes=-I/usr/local/opencv3.4.7/include/opencv2# @ WP

includes=-I/usr/local/opencv3.4.7/include/opencv2/core # @ WP

# includes=-I/usr/local/opencv3.4.7/lib # @ WP

# linkapplicationsagainststublibrariesprovidedinthesdks。

LDFLAGS =-L$(MOT_DEEPSORT_PATH )-ldeepsort

LDFLAGS =-Wl,-rpath='/usr/local/lib '

ldflags=-l opencv _ obj detect-l opencv _ highgui-l opencv _ core-l opencv _ img proc-l opencv _ img codecs-l opencv

# ldflags=-l/usr/local/opencv3.4.7/Li B- l opencv _ obj detect-l opencv _ highgui-l opencv _ core-l opencv

LDFLAGS =-L$(DARKNET_PATH )-ldarknet

LDFLAGS =-Wl,-rpath='$(DARKNET_PATH ) '

LDFLAGS =-Wl,-rpath='$(MOT_DEEPSORT_PATH ) '

#这里,您需要根据在linux上设置的opencv路径进行修改

# includes=-I/usr/local/opencv3.4.2/include/opencv-I。

#LIBS=-L/usr/local/opencv3.4。

2/lib -lopencv_objdetect -lopencv_highgui -lopencv_imgcodecs -lopencv_core -lopencv_videoio -lopencv_imgproc

#

EXE_NAME ?= my_demo

all: $(EXE_NAME)

%.o: %.cpp

$(GCC) $(CCFLAGS) $(INCLUDES) -c $<

%.o: $(CLIENT_SERVER_PROTO)/%.cpp

$(GCC) $(CCFLAGS) $(INCLUDES) -c $<

%.o: $(CLIENT_SERVER_PROTO)/%.cc

$(GCC) $(CCFLAGS) $(INCLUDES) -c $<

$(EXE_NAME): my_demo.o

$(GCC) $(CCFLAGS) $(INCLUDES) -o $@ $^ $(LDFLAGS)

clean:

rm -rf *.o $(EXE_NAME)

解决:

u@u160406:~/sort/DeepSort_yoloV3-HOG_feature$ sudo gedit /etc/ld.so.conf

[sudo] u 的密码:

在/etc/ld.so.conf加入内容:

/usr/local/opencv3.4.7/lib

/usr/local/opencv3.4.7/include

u@u160406:~/sort/DeepSort_yoloV3-HOG_feature$ source /etc/ld.so.conf

include:未找到命令

bash: /usr/local/opencv3.4.7/lib: 是一个目录

bash: /usr/local/opencv3.4.7/include: 是一个目录

u@u160406:~/sort/DeepSort_yoloV3-HOG_feature$ ldconfig

^Z

[1]+ 已停止 ldconfig

u@u160406:~/sort/DeepSort_yoloV3-HOG_feature$ sudo ldconfig

u@u160406:~/sort/DeepSort_yoloV3-HOG_feature$

解决问题的过程中,学会几个命令:

grep -R

移动文件之后,需要:sudo ldconfig 一下,使修改生效

参考:

一、 Linux 动态库选择顺序指:

1. 编译程序时用到动态库,该从那些地方查找,按照怎么样的顺序查找?

2. 运行程序时需要动态库,该从那些地方查找,按照怎么样的顺序查找?

二、gcc 编译程序时查找SO顺序如下:

1. gcc 编译时参数-L指定的路径

2. 环境变量 LIBRARY_PATH

3. 系统默认库位置 /lib /usr/lib

三、Linux 程序运行时查找SO顺序如下:

1. gcc 编译时指定的运行时库路径 -Wl,-rpath

2. 环境变量 LD_LIBRARY_PATH

3. ldconfig 缓存 /etc/ld.so.cache

4 系统默认库位置 /lib /usr/lib

四、LIBRARY_PATH和LD_LIBRARY_PATH环境变量的区别

LIBRARY_PATH和LD_LIBRARY_PATH是Linux下的两个环境变量,二者的含义和作用分别如下:

LIBRARY_PATH环境变量用于在程序编译期间查找动态链接库时指定查找共享库的路径,例如,指定gcc编译需要用到的动态链接库的目录。设置方法如下(其中,LIBDIR1和LIBDIR2为两个库目录):

export LIBRARY_PATH=LIBDIR1:LIBDIR2:$LIBRARY_PATH

LD_LIBRARY_PATH环境变量用于在程序加载运行期间查找动态链接库时指定除了系统默认路径之外的其他路径,注意,LD_LIBRARY_PATH中指定的路径会在系统默认路径之前进行查找。设置方法如下(其中,LIBDIR1和LIBDIR2为两个库目录):

export LD_LIBRARY_PATH=LIBDIR1:LIBDIR2:$LD_LIBRARY_PATH

举个例子,我们开发一个程序,经常会需要使用某个或某些动态链接库,为了保证程序的可移植性,可以先将这些编译好的动态链接库放在自己指定的目录下,然后按照上述方式将这些目录加入到LD_LIBRARY_PATH环境变量中,这样自己的程序就可以动态链接后加载库文件运行了。

区别与使用:

开发时,设置LIBRARY_PATH,以便gcc能够找到编译时需要的动态链接库。

发布时,设置LD_LIBRARY_PATH,以便程序加载运行时能够自动找到需要的动态链接库。

注意:新设置变量 LD_LIBRARY_PATH ,下次开机,一切设置将不复存在;如何把这个值持续写到 LD_LIBRARY_PATH 里呢?

我们就会想有不有什么一劳永逸地方法,使得设置之后就不用再去设置了?答案是肯定的。有两种:

1、在~/目录下打开.bash_profile文件,设置环境变量如下:

LD_LIBRARY_PATH=dir:$LD_LIBRARY_PATH

export LD_LIBRARY_PATH

LD_LIBRARY_PATH 这个环境变量是大家最为熟悉的,它告诉loader:在哪些目录中可以找到共享库。可以设置多个搜索目录,这些目录之间用冒号分隔开。

2、在linux下,还 提供了另外一种方式来完成同样的功能,你可以把这些目录加到/etc/ld.so.conf中,然后调用ldconfig。

五、链接选项-I,-l,-L,-Wl:rpath

-I,添加包含路径

-I 在编译时用,告诉编译器去哪个路径下找文件

如:-I /home/hello/include

表示将/home/hello/include目录作为第一个寻找头文件的目录。

编译器的寻找顺序是:/home/hello/include-->/usr/include-->/usr/local/include。如果在/home/hello/include中有个文件hello.h,则在程序中用#include就能引用到这个文件。

可以加多个包含路径,编译器的寻找顺序为添加的顺序。

-l,添加引用链接库

-l 在链接时用到,它的作用是告诉链接器,要用到哪个库。

如:-l pthread

告诉链接器(linker),程序需要链接pthread这个库,这里的pthread是库名不是文件名,具体来说文件句是libpthread.so。

-L,添加链接库路径

-L 后跟路径,告诉链接器从哪找库(.so文件),只有在链接时会用到。

如:-L /home/hello/lib

表示将/home/hello/lib目录作为第一个寻找库文件的目录,寻找顺序是:/home/hello/lib-->/usr/lib-->/usr/local/lib。

可以加多个包含路径,链接器的寻找顺序为添加的顺序。

-Wl:rpath,添加运行时库路径

-Wl:rpath 后面也是路径,运行的时候用。这条编译指令会在编译时记录到target文件中,所以编译之后的target文件在执行时会按这里给出的路径去找库文件。

如:-Wl:rpath=/home/hello/lib

表示将/home/hello/lib目录作为程序运行时第一个寻找库文件的目录,程序寻找顺序是:/home/hello/lib-->/usr/lib-->/usr/local/lib。

可以加多个包含路径,程序在运行时的寻找顺序为添加的顺序。

参考:

https://blog.csdn.net/hejinjing_tom_com/article/details/52454478

标签:LD,lopencv,lib,路径,LIBRARY,默认,ubuntu,PATH,usr

来源: https://www.cnblogs.com/carle-09/p/11725682.html

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。