adb: createprocessw failed: 系统找不到指定的路径_gcc编译过程、gcc命令参数、静态库和动态库搜索路径...
一、gcc编译过程
gcc -E hello.c -o hello.s //预处理
gcc -S hello.s -o hello.i //编译
gcc -c hello.i -o hello.o //汇编
gcc hello.o -o hello //链接
1)预处理,C编译器对各种预处理命令进行处理,包括文件包含、宏定义的扩展、条件编译的选择等;
2)编译,将预处理得到的源代码文件,经过“翻译转换”,产生机器程序,得到机器语言的汇编文件;
3)汇编,将汇编代码翻译成机器码,但是还不能运行;
4)链接,处理可重定向文件,把各种符号引用和符号定义转换成为可执行文件中的合适信息,通常是虚拟地址。
二、gcc常用命令参数
1、gdb调试 -g
gcc test.c -o test -g //生成的test可以使用gdb命令进行调试
2、指定所使用到的函数库 -l(小写l);指定函数库所在的文件夹 -L;指定头文件所在的文件夹 -I(大写i);
gcc test.c -L/path/lib -lxxx -I/path/include //使用顺序不分先后
3、编译优化
gcc -O test.c //编译器对代码自动优化编译,默认不优化
gcc -o1 test.c //设置优化级别为1;一般选择2,3会有很多bug风险
4、设置警告为错误
gcc -Werror test.c -o test
5、将所有警告信息全开
gcc -Wall test.c
6、编译时设置宏
gcc test.c -o test -DTRUE //相等于在代码第一行定义 #define TRUE 1
gcc test.c -o test -Dmacro=string //代码第一行定义 #define macro string
7、gcc编译标准
gcc test.c -o test //默认gcc test.c -o test -std=gun89
GCC -std编译标准一览表c.biancheng.net
三、静态库和动态库
一、静态链接库搜索路径顺序:
- ld会去找gcc命令中的参数-L
- 环境变量LIBRARY_PATH
- 默认路径/lib、/usr/lib、/usr/local/lib
LIBRARY_PATH和LD_LIBRARY_PATH区别与使用:
- 开发时,设置LIBRARY_PATH,以便gcc能够找到编译时需要的动态链接库。
- 发布时,设置LD_LIBRARY_PATH,以便程序加载运行时能够自动找到需要的动态链接库。
二、动态链接时、执行时搜索路径顺序:
1)ld.so动态共享库搜索顺序
- ELF可执行文件中动态段DT_PATH指定;gcc加入连接参数“-Wl,-rpath”指定动态库搜索路径,多个路径之间用冒号分隔;
- 环境变量LD_LIBRARY_PATH指定路径;
- /etc/ld.so.cache中缓存的动态库路径。通过配置文件/etc/ld.so.conf增删路径(修改后需要运行ldconfig命令);
- /lib/
- /usr/lib/
2)与动态库链接相关的命令
- ld是gcc的链接程序;
- ldd是查看可执行文件中所依赖的库,eg:ldd a.out;
- ldconfig用来更新/etc/ld.so.conf文件;
- nm查看.so库中的函数名字,标记是T的就是动态库里面生成的名字;eg:nm -C test|grep static //在程序文本段查找static
3)动态库搜索路径顺序
- 编译目标代码时指定的动态库搜索路径;
- 环境变量LD_LIBRARY_PATH指定的动态库搜索路径;
- 配置文件/etc/ld.so.conf中指定的动态库搜索路径;/etc/ld/so.conf第一行有个引用命令:include ld.so.conf.d/*.conf;因此最优雅的方式是在ls.so.conf.d目录下创建一个自己的程序依赖的配置文件,配置文件内容为程序依赖的动态库路径,一个路径一行;最后ldconfig更新配置文件;
- 默认动态库搜索路径/lib/
- 默认动态库搜索路径/usr/lib/
4)动态库路径设置方法
- LD_LIBRARY_PATH环境变量指定,也可以放到.bashrv中固化下来,可也以放到当前用户的.bashrc只对当前用户有效;
- 如果启用ls.so.cache的话,系统会在/etc/ld.so.cache中存储所有可引用的动态链接库。这个文件内容可以通过/etc/ls.so.conf来指定;这是比较固定的机制,对全局用户有效;设置后需要root调用ldconfig刷新;
- 默认的标准库路径,如果是64位,还包括/lib64/、/usr/lib64/
- 如果只想对某个特定程序起作用,可以在编译时指定搜索路径。gcc的 -Wl和-rpath参数
- /usr/local/lib/和/usr/local/lib64/不在标准路径之列
Linux下动态链接库加载路径及搜索路径问题_Linux_脚本之家www.jb51.net
ldconfig作用是在ld.so.conf和默认路径(/lib/、/usr/lib/)中所列出目录下搜索动态库;
编译时,ld链接器指定链接什么库,编译程序的最后一步是运行ld;
程序运行时,ld.so动态连接器,根据指定的路径加载库;
缓存文件/etc/ld.so.cahche,保存已经排好序的动态链接库名字列表;
adb: createprocessw failed: 系统找不到指定的路径_gcc编译过程、gcc命令参数、静态库和动态库搜索路径...相关推荐
- python安装失败找不到指定路径_使用[WinError 2]安装python-crfsuite失败系统找不到指定的文件...
我试着安装 $ pip install python-crfsuite Collecting python-crfsuite Using cached python-crfsuite-0.8.4.ta ...
- TortoiseSVN Launch Failed Error:系统找不到指定路径
右键操作TortoiseSVN 各种报 Launch Failed Error:系统找不到指定路径 刚刚安装完成后出现的问题 解决方案:重启电脑
- Tomcat SSL Failed to load keystore type JKS with path 系统找不到指定文件
Tomcat6 启用 SSL,配置 <Connector port="8443" protocol="org.apache.coyote.http11.Http11 ...
- Java如何获取IP属地 ip2region failed to create searcher with x:java.io.FileNotFoundException:( 系统找不到指定的路径)
目录 引言 获取ip地址 使用ServerHttpRequest获取ip完整地址: 获取ip地址的源代码 接口调用源代码 使用HttpServletRequest获取ip完整地址 获取ip地址的源代码 ...
- pyinstall Failed to execute script ‘main‘ due to unhandled exception: [WinError 3]系统找不到指定的路径,包含文件夹
问题 Failed to execute script 'main' due to unhandled exception: [WinError 3]系统找不到指定的路径 打包文件 包含文件夹 YOL ...
- FireDAC 报系统找不到指定的文件错误,解决之道。
报:[FireDAC][Phys][MySQL]-314. Cannot load vendor library [libmysql.dll or libmysqld.dll]. 系统找不到指定的文件 ...
- Winodws10 VS2019 Clion CMake 编译 OpenCV rc 系统找不到指定的文件。NMAKE : fatal error U1077
在从源码编译开源库这条路上,怎么这么多坑给我踩? 这次是编译 OpenCV. 简单总结 在 Windows10 系统下,使用 VS2019 编译链,在 Clion 编译 OpenCV 时,出现报错,报 ...
- 解决java.io.IOException: Cannot run program cygpath: CreateProcess error=2, 系统找不到指定的文件 的错误...
一.外部环境: 系统环境:Windows 8 磁盘分区:只有C盘 开发环境:IntelliJ IDEA Community Edition 2016.1.3(64) 执行代码:rdd.saveAsTe ...
- svn更新代码提示“系统找不到指定路径”
在使用svn时,更新代码是出现: clean up failed to process the fallowing......"系统找不到指定路径" 根据上一句话可以查到是因为更新 ...
最新文章
- 【TCP/IP】IP路由选择
- Server2008 RMS測試
- 移动端web开发分享
- openstack常用命令及控制节点端口一览
- 新版上线时发现的数据库优化问题
- python遍历excel_python遍历文件读取并写结果到excel
- Kafka系统的组件、角色以及和zookeeper的关系
- 非常不错的文章,囊括啦高性能、高可用的分布式架构体系所有名词
- BZOJ1922 SDOI2010 大陆争霸 最短路
- MySQL保留2位小数
- 对上拉下拉电阻的作用作个总结(想了解的过来看看)(转载)
- ipvs,ipvsadm的安装及使用
- html 不显示null,如果model.entity为null,则不显示/写特定的html
- 回调函数是同步还是异步_[React] 4 - setState / 异步还是同步?
- LINUX编译:通过prefix把编译结果输出到指定位置
- Raki的读paper小记:RoBERTa: A Robustly Optimized BERT Pretraining Approach
- 主流智能家居通信总线、无线、电力载波和以太网的基本介绍
- Vcenter证书过期处理----Vcenter无法登录,“根证书错误”,“签名证书无效”,“503 service not available”
- 骁龙768G相当于什么处理器 骁龙780g什么水平
- 微软的100道算法面试题(终结版)
热门文章
- 文献记录(part51)--识别聚类间远近关系的双几何体模型
- 华南理工专科计算机随堂联系,华南理工大学网络教育计算机基础随堂练习第三章...
- java string 字符个数字_java从字符串中提取数字
- viterbi算法_序列比对(十四)——viterbi算法和后验解码的比较
- 如何自行找出 SAP Spartacus 查询用户信息的 API Service 类
- 在 Visual Studio Code 里编辑 Excel 和 csv 文件两个比较方便的扩展应用
- ABAP, UI5和webpack的处理入口
- 如何处理SAP HANA Web-Based Development Workbench的403 Forbidden错误
- i18n - why Chinese resource will be loaded by default
- SAP云平台ABAP编程环境免费账号使用过程中的一些问题