首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

为什么在文件夹"/ lib"和"/ usr/lib"中链接库(如pthread)?

在Linux系统中,链接库是为了实现程序的模块化和重用。链接库是一组预编译的代码,可以在运行时被程序动态或静态地链接。链接库通常存储在特定的目录中,以便操作系统和程序在运行时找到它们。

在Linux文件系统中,"/lib"和"/usr/lib"是两个常见的链接库存储目录。它们的区别在于它们的用途和管理方式:

  1. "/lib":这个目录通常用于存储与操作系统内核相关的链接库。这些库是操作系统的核心组件,为系统提供基本的功能,如内存管理、进程管理等。
  2. "/usr/lib":这个目录通常用于存储与操作系统环境相关的链接库。这些库是为应用程序提供支持的,包括图形界面、网络通信、数据库等功能。

在这两个目录中,链接库通常按照库名称和版本号进行分类。例如,pthread库是一个用于实现线程安全的库,它通常存储在"/lib"或"/usr/lib"目录中。

链接库的优势在于它们可以提高程序的模块化和重用性,减少代码的重复编写,提高开发效率。应用场景包括系统开发、软件开发、游戏开发等。

推荐的腾讯云相关产品:

  1. 腾讯云服务器:提供可扩展的云服务器,可以根据需要选择不同的配置和操作系统。
  2. 腾讯云数据库:提供MySQL、MongoDB等多种数据库服务,支持备份、恢复、监控等功能。
  3. 腾讯云CDN:提供内容分发网络服务,加速网站访问速度。

产品介绍链接地址:

  1. 腾讯云服务器:https://cloud.tencent.com/product/cvm
  2. 腾讯云数据库:https://cloud.tencent.com/product/cdb
  3. 腾讯云CDN:https://cloud.tencent.com/product/cdn
页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

gcc的编译命令_cmake 编译

lib,以及系统文件夹下。...connectors的头文件,还有一个lib文件夹,里面包含二进制so文件libmysqlclient.so 其中inclulde文件夹的路径是/usr/dev/mysql/include,lib文件夹是...3.3强制链接时使用静态链接库 默认情况下, GCC链接时优先使用动态链接库,只有当动态链接库不存在时才考虑使用静态链接库,如果需要的话可以在编译时加上-static选项,强制使用静态链接库。.../usr/dev/mysql/lib目录下有链接时所需要的库文件libmysqlclient.solibmysqlclient.a,为了让GCC链接时只用到静态链接库,可以使用下面的命令: gcc...–L /usr/dev/mysql/lib –static –lmysqlclient test.o –o test 静态库链接时搜索路径顺序: 1. ld会去找GCC命令的参数-L 2.

1.8K30

Apache编译后无法正常工作

> /lib64/libattr.so.1 (0x00007f05ed526000) Tips: ldd命令打印的结果,=>左边的表示该程序需要连接的共享库之so名称,右边表示由Linux的共享库系统找到的对应的共享库文件系统的具体位置...libapr-1.so.0.5.2 /usr/lib64/libapr-1.so.0 这样Apache加载动态链接库找到的地址相当于用的是/data/app/apr-1.5.2/lib/libapr-1...---- 知识补充 如果你使用ldd命令没有找到对应的共享库文件其具体位置,可能是两种情况引起的: 共享库没有安装在该系统; 安装了,但是共享库保存在/etc/ld.so.conf文件列出的搜索路径之外的位置...通常情况下, 许多开放源代码的程序或函数库都会默认将自己安装到/usr/local目录下的相应位置(:/usr/local/bin 或 /usr/local/lib 等), 以便与系统自身的程序或函数库相区别...而许多Linux系统的/etc/ld.so.conf文件默认又不包含/usr/local/lib。 因此,往往会出现已经安装了共享库,但是却无法找到共享库的情况。

2.7K20

cmake使用

Cmake 并不直接建构出最终的软件,而是产生标准的建构档( Unix 的 Makefile 或 Windows Visual C++ 的 projects/workspaces),然后再依一般的建构方式使用...这使得熟悉某个集成开发环境(IDE)的开发者可以用标准的方式建构他的软件,这种可以使用各平台的原生建构系统的能力是 CMake SCons 等其他类似系统的区别之处。...) # 添加编译选项 add_definitions(编译选项) # 打印消息 message(消息) # 编译子文件夹的CMakeLists.txt add_subdirectory(子文件夹名称.../local/include") set( DBoW3_LIBS "/usr/local/lib/libDBoW3.a") target_link_libraries(${PROJECT_NAME}...common SHARED util.cpp) # 生成动态库或共享库 搜索所有的 cpp 文件 aux_source_directory(dir VAR) 发现一个目录下所有的源代码文件并将列表存储一个变量

2K30

GCC -l选项:手动添加链接库

文件夹的 libcrc.a 文件,运行如下编印命令成功编译: gcc tstcrc.c -o tstcrc /root/libcrc/lib/libcrc.a 使用 gcc 究竟如何手动连接库呢,找到了一篇文章...这些链接库一般位于 /lib/ 或 /usr/lib/,或者位于 GCC 默认搜索的其他目录。...前缀 lib 后缀 .a 是标准的, m 是基本名称,GCC 会在 -l 选项后紧跟着的基本名称的基础上自动添加这些前缀、后缀,s数学库,基本名称为 m。...---- 多要连接其他目录的库怎么办呢? 通常,GCC 会自动标准库目录搜索文件,例如 /usr/lib,如果想链接其它目录的库,就得特别指明。...-o main.out -L/usr/lib -lm 可以使用多个 -L 选项,或者一个 -L 选项内使用冒号分割的路径列表。

2.3K20

ubuntu 14.04 下安装 PyTesser 进行OCR识别

解压压缩包 sudo unzip pytesser_v0.0.1.zip 提示: 1.建议创建一个文件夹,把压缩包放到文件夹解压,因为直接使用unzip来解压会把压缩包里的东西解压到当前目录,不易管理...2.解压时可以使用 -d将zip文件解压至指定文件夹下,: sudo unzip pytesser_v0.0.1.zip -d /opt/py 测试 目录下有“phototest.tif”'fnord.tif...,为了让动态链接库为系统所共享,还需运行动态链接库的管理命令--ldconfig  ldconfig 命令的用途,主要是默认搜寻目录(/lib/usr/lib)以及动态库配置文件/etc/ld.so.conf...内所列的目录下,搜索出可共享的动态 链接库(格式如前介绍,lib*.so*),进而创建出动态装入程序(ld.so)所需的连接和缓存文件.缓存文件默认为 /etc/ld.so.cache,此文件保存已排好序的动态链接库名字列表.... (2) -n : 用此选项时,ldconfig仅扫描命令行指定的目录,不扫描默认目录(/lib,/usr/lib),也不扫描配置文件/etc/ld.so.conf所列的目录. (3) -N : 此选项指示

1.2K10

CMake常用命令的一些整理

target_link_libraries 区别 cmake语法,link_librariestarget_link_libraries是很重要的两个链接库的方式,虽然写法上很相似,但是功能上有很大区别...+ .dll方式隐式调用动态库的.lib库 1.13 file语法 1.13.1 将文件夹所有的类型的文件添加到文件列表 例如将当前文件夹下所有.cpp文件的文件名加入到MAIN_SRC,将当前文件夹下所有...src文件夹下所有.cpp文件的文件名加入到MAIN_SRC,将当前文件夹子目录src文件夹下所有.h加入到MAIN_HDR。...的3; CMAKE_MINOR_VERSION cmake次版本号,3.4.1的4; CMAKE_PATCH_VERSION cmake补丁等级,3.4.1的1; CMAKE_SYSTEM 操作系统名称...Please use a different C++ compiler.") endif() 1.23 CMake生成VS解决方案将项目放置设定文件夹下 例如,我们工程引用了许多的第三方开源库,这些库的源码与自己所写的代码需要进行区分隔离

1.5K10

linux之ldconfig工具的使用

ldconfig是一个动态链接库管理命令 为了让动态链接库为系统所共享,还需运行动态链接库的管理命令--ldconfig ldconfig  命令的用途,主要是默认搜寻目录(/lib/usr...这就是为什么修改了ld.so.conf要重新运行一下ldconfig的原因 补充一点,ldconfig/sbin里面。 ldconfig几个需要注意的地方! 1....往/lib/usr/lib里面加东西,是不用修改/etc/ld.so.conf的,但是完了之后要调一下ldconfig,不然这个library会找不到 2....library/usr/local/mysql/lib下面,这时就 需要在/etc/ld.so.conf下面加一行/usr/local/mysql/lib,保存过后ldconfig一下,新的library...那也可以,就是export一个全局变 量LD_LIBRARY_PATH,然后运行程序的时候就会去这个目录找library。一般来讲这只是一种临时的解决方案,没有权限或临时需要的时 候使用。

1.6K10

ubuntu 配置 OpenCV OpenCV_contrib

build (其实叫啥都行),这个文件夹是我们用来装 cmake 编译文件的,目的就是不跟源文件掺杂,然后我们进入这个 build 文件夹 $ cd opencv-3.4.4 $ mkdir build...程序运行的时候可能需要动态的链接库,主要是默认搜寻目录 /lib /usr/lib 以及动态库配置文件 /etc/ld.so.conf 内所列的目录下, 搜索出可共享的动态链接库(.so 后缀文件...因此一般的做法就是 /etc/ld.so.conf 下新建一个文件叫做 opencv.conf,往里面写上动态链接库的路径,再通过 ldconfig 命令使配置的路径生效。...$ sudo vim /etc/ld.so.conf.d/opencv.conf 往里面写上 /usr/local/lib ,表示去 /usr/local/lib 这个目录寻找 OpenCV 的动态链接库...(make install 时将动态链接库安装在此处) 最后执行 ldconfig 命令使修改生效,下次程序运行时,会自动 /usr.local/lib 目录搜索动态库 $ sudo ldconfig

1.3K10

ldd ldconfig

ldconfig 命令的用途,主要是默认搜寻目录(/lib/usr/lib)以及动态库配置文件/etc/ld.so.conf内所列的目录下,搜索出可共享的动态链接库(格式如前介绍,lib*.so*)...这就是为什么修改了ld.so.conf要重新运行一下ldconfig的原因 补充一点,ldconfig/sbin里面。 ldconfig几个需要注意的地方 1....往/lib/usr/lib里面加东西,是不用修改/etc/ld.so.conf的,但是完了之后要调一下ldconfig,不然这个library会找不到 2....library/usr/local/mysql/lib下面,这时就需要在/etc/ld.so.conf下面加一行/usr/local/mysql/lib,保存过后ldconfig一下,新的library...那也可以,就是export一个全局变量LD_LIBRARY_PATH,然后运行程序的时候就会去这个目录找library。一般来讲这只是一种临时的解决方案,没有权限或临时需要的时候使用。

78430

Linux 编译动态库_makefile编译动态库

动态库是目标文件的集合,目标文件动态库的组织方式是按特殊的方式组织形成的。动态库函数变量的地址是相对地址而不是绝对地址,其真实地址调用动态库的程序加载时形成的。...真名是动态链接库的真实名字,一般总是别名的基础上添加一个版本号信息。除此之外还有一个链接名,他是程序链接的时候使用的名字。...系统的配置文件/etc/ld.so.conf便是动态链接库的搜索路径配置文件。在这个文件内存放着可以被Linux共享的动态链接库所在目录的名字(系统默认的/lib, /usr/lib除外)。...ldconfig命令的作用是系统的默认搜索路径(/lib, /usr/lib, /usr/local/lib)以及动态链接库配置文件所列出的目录里搜索动态链接库,然后创建动态链接装入程序需要的链接和缓存文件...使用ldconfig命令默认情况下不输出扫描的结果信息,它的作用是更新系统默认搜索路径配置文件制定的搜索路径,然后将扫描结果缓存到“/etc/ld.so.cache”,供运行程序快速访问调用。

6K20

利用VScodecmake编译构建C++工程代码

libtorch(如果不明白这是什么库的童鞋只知道是两个库就可以,在这里我们的程序要链接它们)。...] libraries: torch;caffe2_library;caffe2_gpu_library;/usr/lib/x86_64-linux-gnu/libcuda.so;/usr/local.../cuda/lib64/libnvrtc.so;/usr/local/cuda/lib64/libnvToolsExt.so;/usr/local/cuda/lib64/libcudart_static.a...example-app [build] Build finished with exit code 0 这里也是提示我们编译成功,成功后我们的目录是这样的: 所有的编译后的东西自动被这个cmake插件放入了build文件夹...修改,这里不多说了,尽情地探索吧~ tasks.json 之前提到我们执行编译好的文件后总是需要进入终端再执行命令,很是麻烦,所以我们使用tasks.json: 点击配置后,我们选择最后一个配置档

73170

ubuntu18.04 安装qt5.12.8及环境配置的详细教程

找到原因了 Qt 默认 /usr/lib/ 目录下查找动态链接库,但是很多 Linux 发行版将 OpenGL 链接库放在其它目录,例如我使用的是 CentOS 7,OpenGL 链接库位于 /usr.../lib64/ 目录,而对于 Ubuntu,OpenGL 链接库位于 /usr/lib/i386-linux-gnu/mesa/ 目录。...只要我们把 libGL.so 拷贝到 /usr/lib/ 目录,或者 /usr/lib/ 目录下为 libGL.so 创建一个链接,就能解决问题。显然第二种办法更好。...另外,Linux 发行版自带的 OpenGL 链接库在后缀添加了版本号,例如 libGL.so.1、libGL.so.1.2.0、libGL.so.1.3.1 等,但是 Qt 链接阶段查找的 OpenGL...总起来说,我们需要在 /usr/lib/ 目录下为 OpenGL 链接库创建一个链接,并去掉版本号。

4.2K31

Linux动态链接

问题 曾经不止一次遇到过这样的情况:从机器A拷贝一个二进制文件到另一台机器B,两台机器的操作系统版本一样,可是机器A能正常运行,机器B却提示错误。最常见的就是提示动态链接库找不到,: ....命名规则 动态链接库与应用程序之间的真正链接是应用程序运行时,因此很容易出现开发环境运行环境的动态链接库不兼容或缺失的情况。 Linux通过规定动态链接库的版本命名规则来管理兼容性问题。...相关路径 /lib:最关键基础的动态链接库。 /usr/lib:关键的动态链接库。 /usr/local/lib:第三方动态链接库。 由/etc/ld.so.conf配置文件指定的目录。...因此,系统启动时会通过ldconfig为动态链接库生成SO_NAME/etc/ld.so.cache存放系统动态链接库的路径信息,加速动态链接库的查找。...程序启动查找动态链接库的路径顺序如下: 由LD_LIBRARY_PATH指定的路径。 由路径缓存文件/etc/ld.so.cache指定的路径。 默认共享库目录,先/usr/lib,然后/lib

5K91

算法部署 | 万字长文带你从C++案例一步一步实操cmake(起飞系列)

CMake就是针对上面问题所设计的工具:它首先允许开发者编写一种平台无关的CMakeList.txt 文件来定制整个编译流程,然后再根据目标用户的平台进一步生成所需的本地化Makefile工程文件,...add_library (MathFunctions SHARED ${DIR_LIB_SRCS}) 该文件中使用命令 add_library 将 src 目录的源文件编译为动态链接库。...add_library (MathFunctions STATIC ${DIR_LIB_SRCS}) 将 src 目录的源文件编译为静态链接库。...add_library (MathFunctions SHARED ${DIR_LIB_SRCS}) 将 src 目录的源文件编译为动态链接库。...sudo vi /etc/ld.so.conf.d/libc.conf #文件的末尾加入要调用的动态链接库的路径 #这里加入动态库的默认安装路径 /usr/local/lib 保存退出后,然后控制台执行以下命令

1.4K30

ubuntu gcc编译时对’xxxx’未定义的引用问题

dso.o:函数‘dso_load(char const*, char const*)’: dso.cpp:(.text+0x3c):对‘dlopen’未定义的引用 dso.cpp:(.text+0x4c...比如上面的例子,是因为缺失了dlopen、dlsym、dlerror、dlclose这些函数的实现,这几个函数是用于加载动态链接库的,编译的时候需要添加-ldl来使用dl库(这是静态库,系统目录下/usr.../lib/i386-linux-gnu/libdl.a、/usr/lib/x86_64-linux-gnu/libdl.a)。...但是看上面编译的时候是有添加-ldl选项的,那么为什么不行呢? gcc 依赖顺序问题 这个主要的原因是gcc编译的时候,各个文件依赖顺序的问题。...例如:main.c中使用了pthread库相关函数,那么编译的时候必须是main.c在前,-lpthread在后。gcc main.c -lpthread -o a.out。

7.7K20
领券