每天学五分钟 Liunx 1000 | 软件篇:源码安装
软件安装流程
[root@lianhua tarball]$ cat hello.cpp
#include <stdio.h>
#include "thanks.h" int main(void)
{
printf("Hello World\n");
thanks(); return 0;
}
[root@lianhua tarball]$ cat thanks.cpp
#include <stdio.h> int thanks(void)
{
printf("thanks lianhua, I love you\n"); return 0;
}
[root@lianhua tarball]$ cat thanks.h
int thanks();
[root@lianhua tarball]$ gcc -c hello.cpp
[root@lianhua tarball]$ ll
total 16
-rw-r--r-- 1 root root 117 May 10 22:44 hello.cpp
-rw-r--r-- 1 root root 1560 May 10 22:45 hello.o
-rw-r--r-- 1 root root 80 May 10 22:45 thanks.cpp
-rw-r--r-- 1 root root 14 May 10 22:44 thanks.h
[root@lianhua tarball]$ gcc -o hello hello.o
hello.o: In function `main':
hello.cpp:(.text+0xf): undefined reference to `thanks()'
collect2: error: ld returned 1 exit status
[root@lianhua tarball]$ gcc -c hello.cpp thanks.cpp
[root@lianhua tarball]$ ll
total 20
-rw-r--r-- 1 root root 117 May 10 22:44 hello.cpp
-rw-r--r-- 1 root root 1560 May 10 22:46 hello.o
-rw-r--r-- 1 root root 100 May 10 22:46 thanks.cpp
-rw-r--r-- 1 root root 14 May 10 22:44 thanks.h
-rw-r--r-- 1 root root 1520 May 10 22:46 thanks.o
[root@lianhua tarball]$ gcc -o hello hello.o thanks.o
[root@lianhua tarball]$ ll
total 32
-rwxr-xr-x 1 root root 8552 May 10 22:47 hello
-rw-r--r-- 1 root root 117 May 10 22:44 hello.cpp
-rw-r--r-- 1 root root 1560 May 10 22:46 hello.o
-rw-r--r-- 1 root root 100 May 10 22:46 thanks.cpp
-rw-r--r-- 1 root root 14 May 10 22:44 thanks.h
-rw-r--r-- 1 root root 1520 May 10 22:46 thanks.o
[root@lianhua tarball]$ file hello
hello: ELF 64-bit LSB executable, x86-64, version 1 (SYSV), dynamically linked (uses shared libs), for GNU/Linux 2.6.32, BuildID[sha1]=1801febeffa3328a578dac21ee994dd50893ed3f, not stripped
[root@lianhua tarball]$ ./hello
Hello World
thanks lianhua, I love you
静态函数库的可执行文件
[root@lianhua tarball]$ ar rcs liblianhua.a thanks.o
[root@lianhua tarball]$ ll
total 36
...
-rw-r--r-- 1 root root 1668 May 10 23:09 liblianhua.a
[root@lianhua tarball]$ gcc hello.cpp -llianhua -L/root/hxia/tarball
[root@lianhua tarball]$ gcc hello.cpp -llianhua -L/root/hxia/tarball -o lianhua
[root@lianhua tarball]$ ll
total 60
-rwxr-xr-x 1 root root 8552 May 10 22:47 hello
-rw-r--r-- 1 root root 117 May 10 22:44 hello.cpp
-rw-r--r-- 1 root root 1560 May 10 22:46 hello.o
-rwxr-xr-x 1 root root 8552 May 10 23:11 lianhua
-rw-r--r-- 1 root root 1668 May 10 23:09 liblianhua.a
-rw-r--r-- 1 root root 100 May 10 22:46 thanks.cpp
-rw-r--r-- 1 root root 14 May 10 22:44 thanks.h
-rw-r--r-- 1 root root 1520 May 10 22:46 thanks.o
[root@lianhua tarball]$ ./lianhua
Hello World
thanks lianhua, I love you
动态函数库的可执行文件
[root@lianhua shared]$ gcc -fPIC -shared thanks.cpp -o liblianhua.so
[root@lianhua shared]$ ll
total 20
-rw-r--r-- 1 root root 117 May 10 23:18 hello.cpp
-rwxr-xr-x 1 root root 8112 May 10 23:20 liblianhua.so
-rw-r--r-- 1 root root 100 May 10 23:18 thanks.cpp
-rw-r--r-- 1 root root 14 May 10 23:18 thanks.h
[root@lianhua shared]$ gcc hello.cpp -L. -llianhua -o hello
[root@lianhua shared]$ ll
total 32
-rwxr-xr-x 1 root root 8528 May 10 23:21 hello
-rw-r--r-- 1 root root 117 May 10 23:18 hello.cpp
-rwxr-xr-x 1 root root 8112 May 10 23:20 liblianhua.so
-rw-r--r-- 1 root root 100 May 10 23:18 thanks.cpp
-rw-r--r-- 1 root root 14 May 10 23:18 thanks.h
[root@lianhua shared]$ ./hello
./hello: error while loading shared libraries: liblianhua.so: cannot open shared object file: No such file or directory
[root@lianhua shared]$ cp libthanks.so /usr/lib/
[root@lianhua shared]$ vi /etc/ld.so.conf
[root@lianhua shared]$ ldconfig
[root@lianhua shared]$ ./hello
Hello World
thanks lianhua, I love you
[root@lianhua tarball]$ ldd hello
linux-vdso.so.1 => (0x00007ffcc9bec000)
libc.so.6 => /lib64/libc.so.6 (0x00007f4175126000)
/lib64/ld-linux-x86-64.so.2 (0x00007f41754f3000)
[root@lianhua tarball]$ ldd ./shared/hello
linux-vdso.so.1 => (0x00007fff7d9da000)
libthanks.so => /lib/libthanks.so (0x00007f6896b53000)
libc.so.6 => /lib64/libc.so.6 (0x00007f6896786000)
/lib64/ld-linux-x86-64.so.2 (0x00007f6896d55000)
每天学五分钟 Liunx 1000 | 软件篇:源码安装的更多相关文章
- Linux一些常用软件的源码安装
Sreen: wget ftp://ftp.gnu.org/pub/gnu/screen/screen-4.0.3.tar.gz .tar.gz cd screen- ./configure make ...
- 【程序包管理】Linux软件管理之src源码安装编译
在很多时候我们需要自定义软件的特性,这时就需要用到源码安装.那么,网上有很多编译源码的工具,那么,我们怎么知道别人使用的是什么工具呢.其实我也不知道(*^▽^*). 那么本篇博客主要是写C代码的源码安 ...
- salt源码安装软件和yum安装软件
上面简单列出了源码安装的sls文件书写思路. 涉及到一些固定的思路:如, 1,拷贝 解压安装时候需要依赖tar.gz存在 如果已安装则无需再次安装. 2,启动脚本 加入chk时候需要文件存在,如果已添 ...
- 搭建LNAMP环境(五)- PHP7源码安装Redis和Redis拓展
上一篇:搭建LNAMP环境(四)- 源码安装PHP7 一.安装Redis 1.创建redis用户组和用户 groupadd redis useradd -r -g redis -s /sbin/nol ...
- linux下源码安装软件
在linux下的很多软件都是通过源码包方式发布的,这样做对于最终用户而言,虽然相对于二进制软件包,配置和编译起来繁琐点,但是它的可移植性却好得多,针对不同的体系结构,软件开发者往往仅需发布同一份源码包 ...
- Linux源码安装软件
Linux环境下 源码编译安装软件 ==== 1. 下载,步骤略 ==== 2. 验证,部分官方下载同时提供签名,MD5,sha1,sha256等校验信息. $ gpg --verify gnupg- ...
- Android必学-异步加载+Android自定义View源码【申明:来源于网络】
Android必学-异步加载+Android自定义View源码[申明:来源于网络] 异步加载地址:http://download.csdn.net/detail/u013792369/8867609 ...
- linux操作之软件安装(二)(源码安装)
源码安装 linux上的软件大部分都是c语言开发的 , 那么安装需要gcc编译程序才可以进行源码安装. yum install -y gcc #先安装gcc 安装源码需要三个步骤 1) ./confi ...
- [svc]salt源码安装软件和yum安装软件
上面简单列出了源码安装的sls文件书写思路. 涉及到一些固定的思路:如, 1,拷贝 解压安装时候需要依赖tar.gz存在 如果已安装则无需再次安装. 2,启动脚本 加入chk时候需要文件存在,如果已添 ...
- Linux 之 软件安装-yum、rpm、源码安装
软件安装-yum.rpm.源码安装 参考教程:[千峰教育] 一.Yum安装软件: 基本说明: 1.yum相当于windows上面的360的软件中心,appstore,安卓的应用商店. 2.yum是re ...
随机推荐
- DI入门案例
1.基于IoC管理bean 2.Service中使用new形式创建的Dao对象是否保留?(不保留) 3.Service中需要的Dao对象如何进入到Service中?(提供方法) 4.Service与D ...
- 基于Raft算法的DLedger-Library分析
1 背景 在分布式系统应用中,高可用.一致性是经常面临的问题,针对不同的应用场景,我们会选择不同的架构方式,比如master-slave.基于ZooKeeper选主.随着时间的推移,出现了基于Raft ...
- 神经网络优化篇:为什么正则化有利于预防过拟合呢?(Why regularization reduces overfitting?)
为什么正则化有利于预防过拟合呢? 通过两个例子来直观体会一下. 左图是高偏差,右图是高方差,中间是Just Right. 现在来看下这个庞大的深度拟合神经网络.知道这张图不够大,深度也不够,但可以想象 ...
- [Acwing 164. 可达性统计] 题解报告
事实上,这道题并不需要拓扑排序.(当然,拓扑排序还是更快) 题目分析 首先,题目中说了,这是一个有向无环图,所以,我们可以考虑 \(\texttt{DP}\) / 记搜 / 拓扑排序 来解决这道题. ...
- 这一次,弄明白JS中的文件相关(一):概念篇
概念是学习的基础.在学习JS中的文件操作之前,先把文件相关的各种概念搞清楚,很有好处. 1. 二进制: 计算机硬件仅能处理和存储二进制数据,所以不管是你正在写的代码,还是你硬盘里的小姐姐,都是以二进制 ...
- Spring表达式语言(SPEL)学习(01)
算术运算 @Test public void test01() { // 定义解析器 ExpressionParser parser = new SpelExpressionParser(); // ...
- super只能用在构造方法里面吗?
super关键字并不仅限于在构造方法中使用.在Java中,super关键字有两个主要的用途: 在子类的构造方法中调用父类的构造方法.这是super的一个常见用法,通常是在子类的构造方法的第一行使用,用 ...
- Microsoft Docs & Learn Champion 冠军赛
2021年个人作为微软MVP,参与了Microsoft Docs & Learn Champion 冠军赛,经过一年的努力,全面宣传了微软的技术. 以下是Microsoft Docs & ...
- 云图说丨初识华为云OrgID
本文分享自华为云社区<[云图说]第282期 初识华为云OrgID:轻松实现统一帐号.统一授权>,作者: 码上开花_Lancer. 组织成员帐号 OrgID是面向企业提供组织管理.企业成员帐 ...
- 技术解读丨GaussDB数仓高可用容灾利器之逻辑备份
摘要:GaussDB数仓的Roach工具,同时提供物理备份和逻辑备份两种主要形态的备份.逻辑备份针对数据库的逻辑对象进行抽取和备份,能够有效地应对单表.schema级等较细粒度的备份,较为灵活和便利. ...