当我们在linux系统引用动态库时,经常会遇到一个问题,加入我们需要的动态库没有在系统的默认目录下,我们编译时使用-L指定了动态库的路径,编译时没有问题,但是执行调用该动态库的可执行文件时,却提示找不到动态库...假设我们使用tensorflow,把需要调用的libtensorflow.so和libtensorflow_framework.so两个动态库放在我们和我们的程序同一级目录下。...,使用ldd命令查看一下: 为什么我们编译的时候明明指定了动态库的路径,而且程序编译的时候没有问题,执行的时候却找不到了呢?...1、因为我们在编译的时候使用-L指定动态库的路径,只是告诉编译器我们所需要的动态库在某个目录下,只对编译起作用 2、当程序执行时,程序还是回去系统的默认路径下寻找程序运行所需的动态库 所以在程序运行的时候会出现找不到动态库的问题...解决办法,使用-Wl,-rpath 所需动态库的路径 告诉程序如果在默认路径下找不到所需动态库,则去当前指定的路径下找动态库。
SpringBoot默认路径 为什么会想到整理这个,我见过很多人包括经验老道的程序员,特别是萌新,都会经常头疼哪些路径是SpringBoot默认能识别到的,哪些路径又是需要开发者自行去进行相应配置的。...因此就有了这一篇简短的文章,来帮助大家整理SpringBoot的默认路径 (一)静态资源 传统的Java Web项目,一般是新建一个WebContent目录,然后所有页面,js等静态资源都放在里面。...但是在SpringBoot的规范里,不需要这么做 /src/main/resource/static/ 一般用于存放静态资源(css,js,image等) /src/main/resource/public...貌似jsp放在/templates下是无法正常识别 具体可查询ResourceProperties类下的CLASSPATH_RESOURCE_LOCATIONS变量,里面设置了默认的路径 一定要注意你使用的前端语言...路径不是一尘不变的 可参考https://www.cnblogs.com/web424/p/6755975.html (二)日志文件 SpringBoot默认能识别的日志文件命名格式, SpringBoot
Docker 默认安装的情况下,会使用 /var/lib/docker/ 目录作为存储目录,用以存放拉取的镜像和创建的容器等。 这个路径是系统存储目录,一般空间会比较小。...如果创建的容器很大那系统空间很快就没有了。 这里记录下将docker的默认路径修改为数据盘。...操作方案 查看磁盘信息,选择一个磁盘空间较大的做为 docker的默认安装位置 $ df -lh Filesystem Size Used Avail Use% Mounted on /dev.../vdb1 197G 399M 187G 1% /data tmpfs 1.6G 0 1.6G 0% /run/user/0 查看docker当前的存储路径..."data-root": "/data/docker/", ... } 重启服务 systemctl restart docker 查看确认docker当前的存储路径 OSType:
认识动静态库 在Linux下创建文件编写以下代码,并生成可执行程序。...在Linux下,我们可以通过ldd 文件名来查看一个可执行程序所依赖的库文件。...此时我们可以看到,libc-2.17.so实际上就是一个共享的目标文件库,准确来说,这还是一个动态库。 在Linux当中,以.so为后缀的是动态库,以.a为后缀的是静态库。...而gcc/g++编译器默认都是动态链接的,若想进行静态链接,可以携带一个-static选项。...因为我们使用gcc编译的是C语言,而gcc就是用来编译C程序的,所以gcc编译的时候默认就找的是C库,但此时我们要链接的是哪一个库编译器是不知道的,因此我们还是需要使用-l选项,指明需要链接库文件路径下的哪一个库
Linux下Apache PHP MySQL默认安装路径 Apache 如果采用RPM包安装,安装路径应在 /etc/httpd目录下 Apache配置文件: /etc/httpd/conf/httpd.conf...Apache模块路径: /usr/sbin/apachectl web目录: /var/www/html 如果采用源代码安装,一般默认安装在 /usr/local/apache2目录下 PHP 如果采用...RPM包安装,安装路径应在 /etc/目录下 php的配置文件: /etc/php.ini 如果采用源代码安装,一般默认安装在 /usr/local/lib目录下 php配置文件: /usr/local.../lib/php.ini 或 /usr/local/php/etc/php.ini MySQL 如果采用RPM包安装,安装路径应在 /usr/share/mysql目录下 mysqldump文件位置...mysqldump mysql配置文件: /etc/my.cnf 或 /usr/share/mysql/my.cnf mysql数据目录: /var/lib/mysql目录下 如果采用源代码安装,一般默认安装在
@TOC 动静态库 1....,默认只会存在动态库,不需要动态库,静态库需要单独安装 myadd.h 实现一个加法的声明 #pragma once int myadd(int d1,int d2); ---- myadd.c...---- 将独立的将库引入otherperson中 ,可以正常运行 第三方库的使用 第三方库的使用 1.需要的是指定的头文件和库文件 2.如果没有默认安装到系统的gcc/g++默认的搜索路径下,用户必须指明对应的选项...将下载下来的库和头文件,拷贝到系统默认路径下,这个行为就叫做在Linux下安装库 对于任何软件而言,安装和卸载的本质是拷贝到系统特定的路径下 如果要安装第三方的库,(第一方库是语言,第二方库是操作系统系统接口...,mymath.so有对应的第三方库了 ---- 此时mytest可以正常执行了 但是环境变量只在本次登录有效,若退出再进入,则环境变量还是找不到 方法2 ——建立软链接 在系统默认的路径下,建立一个软链接指向库
大家好,又见面了,我是你们的朋友全栈君。...针对RPM包 一般情况下 命令放在/usr/bin或/usr/sbin下 库在/usr/lib下 数据文件在/usr/share/下 命名: rpm -pql [rpm文件名],来查看一个rpm...包里有哪些文件,即安装的路径 如果是从源码安装的话 可以选择安装路径: 用这条命今看参数 ....,在点有两个说法, 第一种说法,my.cnf只是MySQL启动时的一个参数文件,可以没有它,这时MySQL会用内置的默认参数启动, 第二种说法,MySQL在启动时自动使用/usr/share/mysql...目录下的my-medium.cnf文件,这种说法仅限于rpm包安装的MySQL, 解决方法,只需要复制一个/usr/share/mysql目录下的.cnf文件到/etc目录,并改名为my.cnf即可。
hello,大家好,今天我们继续学习Linux中的动静态库,我们将从不同的角度来学习如何使用,并如何制作一个可供他人使用的动静态库文件,并试着探究一下动态库加载问题。那我们就开始学习吧!!...首先:我们形成2个共识 我们知道gcc默认使用动态链接(建议选项),当动态库和静态库同时存在时,gcc首选的是动态链接。...由于默认使用的是动态链接,这就意味着:当依赖的库中有一个库是动态链接,整体就是动态链接的。静态链接的库以静态的方式吧代码拷贝过来,但最终整体是动态链接。...所以OS和shell也是需要知道库在哪里的。在操作系统中,OS寻找相应的库有指定的默认路径,但是我的库的位置在默认路径里吗?这种情况下,就需要我们指明。所以我们怎么告诉操作系统库在什么位置?...方案三 在与可执行程序同一路径下,建立软链接 四.动静态库的加载问题 4.1静态库的加载问题 静态库需要加载吗?不需要,静态库一般不考虑程序加载过程。
1.2、 库的种类 linux 下的库有两种:静态库和共享库(动态库)。...再找默认库目录 /lib /usr/lib /usr/local/lib,这是当初compile gcc时写在程序内的。 三、动态链接时、执行时搜索路径顺序: 1....配置文件/etc/ld.so.conf中指定的动态库搜索路径; 4. 默认的动态库搜索路径/lib; 5. 默认的动态库搜索路径/usr/lib。...四、静态库和动态链接库同时存在时,gcc/g++默认链接的是动态库: 当一个库同时存在静态库和动态库时,比如libmysqlclient.a和libmysqlclient.so同时存在时:...在Linux下,动态库和静态库同事存在时,gcc/g++的链接程序,默认链接的动态库。
Linux下MySQL的配置文件是my.cnf,一般会放在/etc/my.cnf,/etc/mysql/my.cnf。...mysql>use abc; (2)设置数据库编码 mysql>set names utf8; (3)导入数据(注意sql文件的路径) mysql>source /home/abc/abc.sql...; 1.linux下启动mysql的命令: mysqladmin start /ect/init.d/mysql start (前面为mysql的安装路径) 2.linux下重启mysql的命令:...mysqladmin restart /ect/init.d/mysql restart (前面为mysql的安装路径) 3.linux下关闭mysql的命令: mysqladmin shutdown.../redis-server /usr/local/redis/etc/redis.conf (/usr/local/redis/etc/redis.conf 选择配置路径) linux下实时查看tomcat
因为 gcc 就是默认处理C语言的,所以C标准库不需要指定链接哪个库还有路径,它自身就会帮我们找到并链接。...所以解决方法有如下几种: (1)头文件和库文件安装到系统中 既然在系统默认的搜索路径下找不到我们的库文件和头文件,我们就将它们拷贝到系统的默认搜索路径中。...如下: ln -s mylib/lib/libmylib.so libmylib.so 我们发现,当前路径下的软链接是可以被找到的,那么就说明,动态链接默认会在当前路径下搜索库文件!...另外,如果别人给我们的库中既包含动态库也包含静态库,即同一个库中提供动静态两种库,gcc 默认使用动态库!...首先我们要知道,在 Linux 下,形成的可执行程序是 ELF 格式的可执行程序,它其中包含有一张类似于符号表的东西,里面包含各种函数依赖的库以及地址,符号表就是动态链接这些动态库的。
一、动态库和静态库 具体的动态库和静态库的相关内容点击跳转 Linux的库一般分为动态库和静态库: 静态库(.a):库文件以.a为后缀,程序在编译链接的时候把库的代码链接到可执行文件中。...直接把安装好的库使用起来: 头文件找不到? 编译器搜索头文件时默认在当前目录下搜索,在系统默认指定路径下搜索。...我们在形成可执行程序的时候,库文件要使用的话也要知道库所在的路径在哪里,系统的默认路径是/lib64。所以我们要带上-L。告诉库的路径在哪里。...上面说了那么多,总结一下: -I:指明头文件的搜索路径 -L:指明库文件的搜索路径 -l:指明要链接哪个库,带上库的名称(去掉前缀和后缀) gcc默认是动态链接的(建议行为)对于特定的一个库,...库的安装(把库安装到系统头文件路径下): 把头文件和库文件拷贝进系统的路径下,gcc对于头文件的默认路径是:/usr.include;对于库文件的默认路径是:/lib64: 但是不太推荐这样使用:第三方库并没有经过测试
由于windows和linux的本质不同,因此二者库的二进制是不兼容的。本文仅限于介绍linux下的库。 2.库的种类 linux下的库有两种:静态库和共享库(动态库)。...4.库文件是如何产生的在linux下 静态库的后缀是.a,它的产生分两步 Step 1.由源文件编译生成一堆.o,每个.o里都包含这个编译单元的符号表 Step 2.ar命令将很多.o转换成.a,成文静态库...在linux下,库文件一般放在/usr/lib /lib下, 静态库的名字一般为libxxxx.a,其中xxxx是该lib的名称 动态库的名字一般为libxxxx.so.major.minor,xxxx...库和ld-linux库 7.可执行程序在执行的时候如何定位共享库文件 当系统加载可执行代码时候,能够知道其所依赖的库的名字,但是还需要知道绝对路径 此时就需要系统动态载入器(dynamic linker...—/lib/,/usr/lib目录找到库文件后将其载入内存 8.在新安装一个库之后如何让系统能够找到他 如果安装在/lib或者/usr/lib下,那么ld默认能够找到,无需其他操作。
直白一点来讲,假如你想玩游戏,静态库就是买一台电脑放在宿舍,动态库就是去网吧与其他人共享。 Linux系统下基本都是使用动态库: 接下来我们来详细说说静态库和动态库。...就是把.h头文件安装到操作系统搜索头文件的路径下,.a文件也是这样 也就是这样,现在我们来试试: 因为现在已经在系统默认路径下了,所以既可以使用而不是" " 1 #include<mystdio.h...-L :可以帮助程序员动态加入需要链接的库文件的搜索路径 -l(小写 L ):指明需要链接的库 来实践一下: 这样就可以不改变系统文件就完成与静态库的链接!!!.../mylib/inlclude/mymath.h" 注意一定是使用" ",因为只会会在系统默认路径下搜索。...因为当前我们的代码里没有动态库,所以编译器就只可以使用静态库了。 编译器默认优先动态链接,没有动态库才会使用静态链接 Thanks♪(・ω・)ノ谢谢阅读!!! 下一篇文章见!!!
CMake 简介 : ① 构建工具 : CMake 是 Android 中使用 C/C++ 构建原生库的默认工具 ; ② 跨平台 : CMake 是跨平台的构建工具 , 其可以根据不同类型的平台 , 不同类型的编译器...CMake 构建脚本 CMakeList.txt 设置静态库路径 : # 设置上述静态库的导入路径 # 设置目标属性参数 : # ① 参数 1 ( add ) : 要设置哪个函数库的属性...; ② 参数 2 ( PROPERTIES ) : 设置目标属性 ; ③ 参数 3 ( IMPORTED_LOCATION ) : 设置导入路径 ; ④ 参数 4 : 配置静态库的文件路径 ; # 设置上述静态库的导入路径...# ③ 参数 3 ( IMPORTED_LOCATION ) : 设置导入路径 # ④ 参数 4 : 配置静态库的文件路径 set_target_properties...博客资源 ---- CSDN 博客地址 : 【Android NDK 开发】Android Studio 使用 CMake 导入静态库 ( CMake 简介 | 构建脚本路径配置 | 引入静态库 | 指定静态库路径
一般来说,我们直接gcc编译默认是动态链接的而如果加上-static选项,那么生成的可执行文件将为静态生成的 在使用-static选项时可能出现yum -y install glibc-static的报错...其实gcc编译时去链接库和头文件是去默认路径以及当前路径寻找,而我们将静态库打包到lib目录下,gcc编译时就找不到我们的库了,所以我们需要加一些选项来告知gcc去寻找指定路径的库及头文件。...gcc寻找的默认路径: /usr/include 因此,正确链接的指令为: gcc -o main main.c -I ./lib -L ..../lib -lmycal -static 其中: -I(i的大写) + 指定路径:是指告知gcc除了默认路径,还要去寻找一下指定的路径的头文件。 -L + 指定路径:指定库所在的路径。...,但在默认路径下没有我们的库。
1、静态函数库,是在程序执行前就加入到目标程序中去了 ; 2、动态函数库同共享函数库是一个东西(在linux上叫共享对象库, 文件后缀是.so ,windows上叫动态加载函数库, 文件后缀是.dll)...静态函数库 静态函数库实际上就是简单的一个普通的目标文件的集合,一般来说习惯用“.a”作为文件的后缀。可以用ar这个程序来产生静态函数库文件。Ar是archiver的缩写。...Linux系统中,通常变量LD_LIBRARY_PATH就是可以用来指定函数库查找路径的,而且这个路径通常是在查找标准的路径之前查找。...这两个文件之间没有真正的冲突; GNU标准建议开发人员使用默认的源代码,而FHS则建议分销商使用默认值(通常通过系统的软件包管理系统来选择覆盖源代码默认值)。...例如,以下将使用给定的PATH而不是环境变量LD_LIBRARY_PATH的内容,并运行给定的可执行文件: /lib/ld-linux.so.2 - 文件路径路径可执行 只需执行ld-linux.so
在Linux当中,以.so为后缀的是动态库,以.a为后缀的是静态库。 在Windows当中,以.dll为后缀的是动态库,以.lib为后缀的是静态库。 认识了动态库,那静态库,又是什么呢?...,我们编写main函数来使用Add和Sub函数: 这里我们不能直接用gcc像以前一样编译main.c,因为现在gcc编译器默认只认系统提供的库,而我们需要链接的是第三方库,这里我们链接第三方库有这几种方法如下.../mylib/lib/ -lmyc 运行一下: 第二种方法:将头文件和库拷贝到系统默认的库路径 前提我们需要知道系统默认的头文件和库文件路径: 系统头文件: /usr/include 系统库文件...: /usr/lib64 将我们的库和头文件拷贝到对应目录就行,这里不做演示,因为这种方法不是很推荐,因为我们应尽量避免对系统默认文件修改。 ...注意上面我打包了两个库,虽然看后缀一个静态库,一个动态库,但是其实上述的库都是静态库,linux不是单单通过后缀来判断一个库的类型,下面就来看看如何真正打包一个动态库吧。
1 前言 我们前两篇文章讲解了如何建立动静态库与如何使用动静态库。 接下来我们就来深入聊聊动静态库。...2 编译使用比较 那么 gcc编译的时候是怎么进行的: gcc不加-static选项默认使用动态库,没有提供动态库就只能使用静态库 gcc加-static选项就使用静态库 那么-static的意义是什么呢...将我们的程序进行静态链接,这就要求我们链接的任何库都要通过对应的静态库版本!!! 一般我们的操作系统都是动态库 并且在对.o文件打包的时候: 静态库使用ar -rc 文件名....../mylib/lib -lmyc 使用命令直接表明使用的头文件路径,库文件路径和使用的库 动态库: 直接安装到系统中/lib64/(或者建立软连接) 命令行修改环境变量 修改环境变量初始化脚本文件...静态库很简单,不需要考虑这么多,因为在编译期间就把静态库的内容拷贝到了可执行文件当中。就不必谈论找到静态库这一说了。动态库就不一样,需要在运行的过程中寻找与加载!
这是因为Linux系统默认携带了语言级别的头文件以及语言所对应的库。...答案是肯定的,我们可以在 /usr/include路径下找到Linux默认携带的这些 头文件,但是我们打开stdio头文件后,发现里面 仅仅只是printf函数的声明,并没有具体定义,那么函数的定义都放在哪里了呢...我们可以通过ldd 可执行程序 命令,来查看该程序所用到的库的具体信息 也就是说:系统把这些函数实现都被做到名为 libc.so.6 的库文件中去了,在没有特别指定时,gcc 会到 系统默认的搜索路径...动静态库与动静态链接 在Linux下共分为两种库,一种是动态库,另一种为静态库。其实我们可以通过后缀就可以区分该库是否为动态库。...就好比将网吧里想要的那台电脑给买回宿舍,会很大的占用我们的私人空间(Linux中默认的方式为动态链接,当然我们可以用gcc/g++编译时使用-static的命令,来实现以静态链接的方式运行。)
领取专属 10元无门槛券
手把手带您无忧上云