gcc编译链接用到的环境变量】的更多相关文章

PATH ----  可执行程序寻找路径 C_INCLUDE_PATH  ---- 头文件寻找路径 CPLUS_INCLUDE_PATH  --- g++ 头文件路径 LD_LIBRARY_PATH  --- ldd 连接器寻找动态库路径 LIBRARY_PATH  --- 静态连接器寻找静态库路径 PKG_CONFIG_PATH --- pkgconfig 查找目标生成依赖和链接信息的 xx.pc 文件的路径…
除非明确说明,本文内容仅针对x86/x86_64的Linux开发环境,有朋友说baidu不到,开个贴记录一下(加粗字体是关键词): 用“-Wl,-Bstatic”指定链接静态库,使用“-Wl,-Bdynamic”指定链接共享库,使用示例:-Wl,-Bstatic -lmysqlclient_r -lssl -lcrypto -Wl,-Bdynamic -lrt -Wl,-Bdynamic -pthread -Wl,-Bstatic -lgtest("-Wl"表示是传递给链接器ld的参数…
静态库 有时候需要把一组代码编译成一个库,这个库在很多项目中都要用到,例如libc就是这样一个库, 我们在不同的程序中都会用到libc中的库函数(例如printf),也会用到libc中的变量(例如以后 要讲到的environ变量).本文将介绍怎么创建这样一个库. 这些文件的目录结构是: $ tree . |-- main.c `-- stack |-- is_empty.c |-- pop.c |-- push.c |-- stack.c `-- stack.h 1 directory, 6 f…
编译链接过程 代码 #cat main.c #include <stdio.h> int add(int x, int y); int sub(int x, int y); int mul(int x, int y); int div(int x, int y); int main(void) { printf("add:%d\n", add(1,2)); printf("sub:%d\n", sub(10,100)); printf("mul…
对所有用户有效在/etc/profile增加以下内容.只对当前用户有效在Home目录下的.bashrc或.bash_profile里增加下面的内容:(注意:等号前面不要加空格,否则可能出现 command not found) #在PATH中找到可执行文件程序的路径.export PATH =$PATH:$HOME/bin #gcc找到头文件的路径C_INCLUDE_PATH=/usr/include/libxml2:/MyLibexport C_INCLUDE_PATH #g++找到头文件的路…
每次都装,每次都查 阿里云备案了一个域名,续费了好多年,但是没钱买服务器,就挂在github上.今天收到消息:域名解析服务器不在阿里云,要被GG.只能咬牙买了个阿里云乞丐版. 所有服务都装好了,ping域名也通了,就是无法访问.感谢伟大的sf网友,给我指明了方向,阿里云也不给个醒目的提示,让我等小白如何知道还要配置安全组... 安装nodejs 去nodejs官网查看需要的版本.官网 nodejs的安装需要依赖很多,如gcc等,首先我们需要将这些安装成功,用rpm命令rpm -q gcc查看下,…
一般编译链接c++程序最好使用g++,若有如上的报错信息,需要在gcc后加上 -lstdc++ eg: gcc test.c -lstdc++ gcc和g++都是GNU的一个编译器. g++:后缀.c的程序和.cpp的程序都会当成是c++的源程序来处理. gcc:会把.c的程序处理成c程序. 对于.cpp的程序,编译可以用gcc/g++,链接可以用g++或者gcc -lstdc++.…
本人原创文章,文章是在此代码github/note的基础上进行补充,转载请注明出处:https://github.com/dramalife/note. 以librt丶用户自定义动态库libxxx 和 用户应用程序app为例,讨论编译链接过程中出现的错误, 其中app依赖libxxx,libxxx依赖librt. 关键词:" undefined reference to". 1 源文件 1.1 app.c /* * [note](github.com/dramalife/note.gi…
今天公司的小伙伴遇到一个问题,这里做一个记录. 问题是这样的,他编译了公司的基础库,然后在程序中链接的时候遇到点问题,报错找不到定义. 用到的函数声明大概是这样的: void function(const std::string& in,int* out); 编译的时候显示找不到定义,报错大概是这样的: 'function(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char…
介绍GCC在编译阶段和程序运行阶段用到的环境变量. GCC编译时用到的环境变量 GCC编译时用到的变量. C_INCLUDE_PATH GCC编译时查找头文件的目录列表.比如: echo $C_INCLUDE_PATH # outputs ## /usr/include:/usr/local/include CPLUS_INCLUDE_PATH 类似C_INCLUDE_PATH,适用于g++. LIBRARY_PATH gcc和g++在编译的链接(link)阶段查找库文件的目录列表,比如: ec…
操作系统选择 由于 OpenFOAM 在 Linux 平台开发和测试,在非 Linux 平台无法直接对软件进行编译和安装,所以在非 Linux 平台上最简便方法是使用 docker 容器运行 OpenFOAM.下面主要介绍在 Linux 平台上 OpenFOAM 源程序编译安装过程. 环境变量 在 OpenFOAM 编译和运行时,需要设置多个环境变量.在源程序路径 ${FOAM_DIR}/etc 下,脚本文件 bashrc 包含了软件编译和运行所需的所有环境变量的设置,可以直接通过 source…
特殊情况:用户自定义的头文件使用#include"mylib"时,gcc编译器会从当前目录查找头文件 一.头文件 gcc 在编译时寻找所需要的头文件 :    ※搜寻会从-I开始(gcc 参数,指定头文件搜索位置)    ※然后找gcc的环境变量 C_INCLUDE_PATH,CPLUS_INCLUDE_PATH,OBJC_INCLUDE_PATH    ※再找内定目录 /usr/include   /usr/local/include /usr/lib/gcc-lib/i386-li…
1. 正常配置下调用gcc总是失败,虽然在环境变量中配置了gcc路径,但提示找不到gcc编译程序: 2. 使用全路径调用gcc,也是失败,提示cc1.exe编译失败,失败代码53: 3. 通过远程桌面使用完全相同的命令和源代码文件,编译成功: 4. 测试设置了web网站的物理路径凭据登录类型(LogonMethod)为networt和cleartext,也是失败: 5. 设置web网站关联应用程序池中的加载用户配置文件(LoadUserProfile)为True,编译成功:…
一.在相关配置文件中添加可执行文件/头文件/静态库/动态库的搜索路径 对所有用户有效在/etc/profile添加. 只对当前用户有效在Home目录下的.bashrc或.bash_profile里添加. #在PATH中找到可执行文件程序的路径. export PATH=$PATH:$HOME/bin #gcc找到头文件的路径 C_INCLUDE_PATH=/usr/include/libxml2:/MyLib export C_INCLUDE_PATH #g++找到头文件的路径 CPLUS_IN…
最近解决一个动态链接上的问题,因为以前从来没有接触过这方面的知识,所以恶补了一下,首先要了解gcc编译指令(makefile),ld链接器的选项(还有连接脚本section指定内存位置),熟悉查看连接状态是否成功的指令工具(其中又有elf格式,ld.elf相关指令).然后反汇编理解动态链接的实际执行过程,总的说来这里面的东西还真很多,主要是网上比较深入资料很少,大部分博文也是一知半解,所以后续有问题应直接阅读标准文档.<程序员的自我修养----链接.装载与库>这本书详细介绍了一个应用程序在编译…
一.内核裁剪 内核的裁剪首先就是修改我们的配置文件,即 include/configs/jz2440.h 文件,里面定义的很多宏,我们也许用不上的就要去掉. /* * (C) Copyright 2002 * Sysgo Real-Time Solutions, GmbH <www.elinos.com> * Marius Groeger <mgroeger@sysgo.de> * Gary Jennejohn <garyj@denx.de> * David Muell…
环境变量就是当计算机要执行操作时,在环境变量所制定的范围内查找该操作. 比如linux的ls命令,计算机就需要在$PATH规定的目录中寻找该ls的可执行文件. java的classpath,在该规定的目录中寻找class文件. JAVA_HOME,在该目录中寻找java命令. 在Intellij idea中添加新的jar包,明明已经添加进去了,代码都可以编写,但是编译的时候提示了ClassNotFound 尝试添加 libraries和jar还是无果后,将classpath指向了jar包目录,编…
系统版本:centos6.5版本 java版本:1.8 一.准备工作 1. java -version 检查是否有java环境,没有则需要去安装并配置到环境变量中. 2.下载tomcat包,下载地址:http://tomcat.apache.org/download-70.cgi 可以本地下载后上传到服务器上,也可以直接在服务器上使用wget命令下载,本案例直接使用wget命令下载 : [root@localhost ~]# wget http://apache.fayea.com/tomcat…
最近要装YOLO,但是MAKE的时候总是找不到OPENCV的路径, 原因是:我以前卸载过一次OPENCV,然后自己重新安装了opencv2.4.10,  因为当时只在QT 中用,所以编译完也没有设置环境变量,导致现在装YOLO的时候找不到库路径.. 一.安装opencv(这里不再讲述) 从官网去找教程 二.添加库路径(创建opencv.conf文件) 输入命令:vi /etc/ld.so.conf.d/opencv.conf 输入/usr/local/lib,并保存退出 三.添加环境变量 输入命…
GCC是GUN Compiler Collection的简称,除编译程序外,还包含其他相关工具.GCC可将高级语言编写的源代码构建成计算机直接执行的二进制代码.GCC是Linux平台下最常用的编译程序,也是Linux平台编译器的事实标准.GCC支持四十余种不同目标体系结构(如X86系列.ARM及PowerPC等),可运行在不同的操作系统上(如Linux.Solaris及Windows等).GCC既支持基于宿主的开发(即在A平台上编译该平台使用的程序),也支持交叉编译(即在A平台上编译供B平台使用…
Linux设置编译器环境变量 https://jingyan.baidu.com/article/9f7e7ec0bb22aa6f29155453.html Linux添加环境变量与GCC编译器添加INCLUDE与LIB环境变量 http://www.cnblogs.com/juncent/archive/2012/02/08/2343172.html 在linux下如何使用yum查看安装了哪些软件包 https://zhidao.baidu.com/question/9404973602770…
https://www.oracle.com/technetwork/java/javase/downloads/jdk8-downloads-2133151.html 到此处下载jdk,并安装.(选择合适的版本下载,本例Windows 64位) JDK安装完成后,需要进行环境变量的配置,才能对程序进行编译和运行.   配置环境变量(可以先试验是否配置好) 首先在文本编辑器(如记事本)编写好java代码后,以后缀名为.java保存文件,可以到命令行界面进行执行. 假设hello.java文件在D…
来自http://blog.csdn.net/benpaobagzb/article/details/51364005 GCC 编译使用动态链接库和静态链接库 1 库的分类 根据链接时期的不同,库又有静态库和动态库之分. 静态库是在链接阶段被链接的(好像是废话,但事实就是这样),所以生成的可执行文件就不受库的影响了,即使库被删除了,程序依然可以成功运行. 有别于静态库,动态库的链接是在程序执行的时候被链接的.所以,即使程序编译完,库仍须保留在系统上,以供程序运行时调用.(TODO:链接动态库时链…
以我对C语言编译过程的了解,我用了一点时间画了一个图,提供给大家参考一下,希望有些能对您的问题提上帮助. 前几天刚初步学习了C语言的编译过程,感触挺深的.在C语言中头文件其实起了一个很大的作用. 1.头文件可以不需要编译 2.可以查看具体的声明 3.头文件加上实现文件的o文件提交给使用者即可 ,不需要知道源代码 4..o文件预先编译,所以整个项目编译时,会大大提高编译的时间 . 5.当一个文件(A.c文件)依赖于头文件(b.h)时 ,如果b.c编译之后形成的b.o文件重新编译后,a.o的文件不需…
1 库的分类 根据链接时期的不同,库又有静态库和动态库之分. 静态库是在链接阶段被链接的(好像是废话,但事实就是这样),所以生成的可执行文件就不受库的影响了,即使库被删除了,程序依然可以成功运行. 有别于静态库,动态库的链接是在程序执行的时候被链接的.所以,即使程序编译完,库仍须保留在系统上,以供程序运行时调用.(TODO:链接动态库时链接阶段到底做了什么) 2 静态库和动态库的比较 链接静态库其实从某种意义上来说也是一种粘贴复制,只不过它操作的对象是目标代码而不是源码而已.因为静态库被链接后库…
我们通常把一些公用函数制作成函数库,供其它程序使用.函数库分为静态库和动态库两种.静态库在程序编译时会被连接到目标代码中,程序运行时将不再需要该静态库.动态库在程序编译时并不会被连接到目标代码中,而是在程序运行是才被载入,因此在程序运行时还需要动态库存在.本文主要通过举例来说明在Linux中如何创建静态库和动态库,以及使用它们. 第1步:编辑得到举例的程序--hello.c和test.c: 测试程序test.c调用了公用函数my_lib_function. hello.c: #include <…
1 库的分类 依据链接时期的不同,库又有静态库和动态库之分. 静态库是在链接阶段被链接的.所以生成的可执行文件就不受库的影响了.即使库被删除了,程序依旧能够成功执行. 有别于静态库,动态库的链接是在程序执行的时候被链接的.所以,即使程序编译完,库仍须保留在系统上,以供程序执行时调用. 2 静态库和动态库的比較 链接静态库事实上从某种意义上来说也是一种粘贴复制.仅仅只是它操作的对象是目标代码而不是源代码而已.由于静态库被链接后库就直接嵌入可运行文件里了,这样就带来了两个问题. 首先就是系统空间被浪…
1 库的分类 根据链接时期的不同,库又有静态库和动态库之分. 静态库是在链接阶段被链接的(好像是废话,但事实就是这样),所以生成的可执行文件就不受库的影响了,即使库被删除了,程序依然可以成功运行. 有别于静态库,动态库的链接是在程序执行的时候被链接的.所以,即使程序编译完,库仍须保留在系统上,以供程序运行时调用.(TODO:链接动态库时链接阶段到底做了什么) 2 静态库和动态库的比较 链接静态库其实从某种意义上来说也是一种粘贴复制,只不过它操作的对象是目标代码而不是源码而已.因为静态库被链接后库…
添加运行时共享库目录 运行使用共享库的程序需要加载共享库(不同于G++ 编译时指定的链接库),添加共享库的步骤: 修改文件 /etc/ld.so.conf 添加共享库目录 运行 ldconfig 同步更新一下 如: $ gedit /etc/ld.so.conf #添加 /root/dreamlove/lib $ ldconfig 添加include,lib的搜寻路径 对所有用户有效修改/etc/profile 对个人有效则修改~/.bashrc #在PATH中找到可执行文件程序的路径. exp…
一.程序的组成部分 Linux下程序大都是由以下几部分组成: 二进制文件:也就是可以运行的程序文件 库文件:就是通常我们见到的lib目录下的文件 配置文件:这个不必多说,都知道 帮助文档:通常是我们在Linux下用man命令查看的命令的文档 二.Linux下程序的存放目录 Linux程序的存放目录大致有三个地方: /etc, /bin, /sbin, /lib  :系统启动就需要用到的程序,这些目录不能挂载额外的分区,必须在根文件系统的分区上 /usr/bin,/usr/sbin,/usr/li…