第一款:Putty
Putty是一款非常轻巧灵活的终端软件, *** 作简单、免费开源。目前主要用于Windows平台,集成了Telnet、SSH、Rlogin等客户端工具,可以方便的远程登录和管理服务器,非常适合追求轻便灵活的用户。
第二款:Powershell
Powershell是Windows10系统自带的命令行工具,cmd命令提示符的增强版,基本功能与Bash相似,可直接运行大部分shell命令,使用非常轻便快捷。如果对终端功能要求不高,可以使用该工具。
第三款:Xshell,老男孩老师推荐
Xshell是一款应用广泛的终端软件,在业界很受欢迎。支持多窗口切换和常见的SHH、Telnet、SFTP等协议,可以轻松上传下载文件。如果对终端功能要求高,管理服务器多,可以考虑使用这个软件,体验很好。
第四款:SecureCRT
SecureCRT是一款支持SSH的终端仿真程序,简单来说就是在Windows下登录Unix或Linux服务器主机的软件,自带文件传输工具,可以方便地上传下载文件,调整界面风格,切换多窗口等。对于远程连接和管理服务器来说,这是非常不错的选择。
第五款:Mobaxterm
Mobaxterm是一款全方位的终端软件,不仅可以像Putty一样通过SSH连接远程服务区,还可以像winscp一样使用SFTP.SCP等协议传输文件,内置多标签和多终端分屏。此外,它还支持VNC.RDP.Xdmcp等远程桌面连接。最重要的是完全免费,功能非常强大。
第六款:堡塔SSH终端
堡塔SSH终端是一款免费软件,支持SSH和SFTP客户端的SSH终端管理和文件传输。 *** 作更方便,工作更高效,使用堡塔SSH终端,可以在同一屏幕上切换SSH和SFTP界面,使用命令行快速上传和下载文件,非常方便。
方法和详细的 *** 作步骤如下:
1、第一步,找到需要打开的.o后缀文件,见下图,转到下面的步骤。
2、第二步,执行完上面的 *** 作之后,打开编译器,并在此处使用c-free5,选择新文件,并将其保存为cpp格式,见下图,转到下面的步骤。
3、第三步,执行完上面的 *** 作之后,单击“运行”,发现在文件末尾出现了一个具有相同名称.o后缀的文件,见下图,转到下面的步骤。
4、第四步,执行完上面的 *** 作之后,可以推断,当多种编程语言希望混合编译时,可以将其编译成.o文件,然后链接到可执行的文件,见下图,转到下面的步骤。
5、第五步,执行完上面的 *** 作之后,如果要打开,则需要先找到原始cpp文件并使用IDE对其进行编译,以形成exe可执行文件,然后才能将其打开,见下图。这样,就解决了这个问题了。
在 Linux 开发时,我们经常会看到一些形如 xxx.so 的名称出现,其中 so 是 Shared Object 的缩写,即可以共享的目标文件,也就是我们所称为的动态链接库,和在 Windows 下大家玩 游戏 时遇到的 xxx.dll 错误中的文件是一个类型的。
面试中经常会问到以下问题:
库是写好的现有的,成熟的,可以复用的代码。现实中每个程序都要依赖很多基础的底层库,不可能每个人的代码都从零开始,因此库的存在意义非同寻常。本质上来说库是一种可执行代码的二进制形式,可以被 *** 作系统载入内存执行。
库有两种:
在一个程序的编译过程中,分为以下几个步骤: 预处理 , 编译 , 汇编 , 链接 。本文中讨论的链接库就是针对最后一个步骤「链接」而言的。
动态库和静态库的区别
左图为静态链接库,右图为动态链接库
对于静态链接库而言在链接阶段,会将汇编生成的「目标文件.o」与引用到的库一起链接打包到可执行文件中。因此对应的链接方式称为静态链接:
静态链接可以理解为最后生成了一个「单文件免安装绿色版」的程序,优点在于移植的时候只需要移动这一个文件,缺点在于文件体积非常大,为了解决这样的问题,就有了动态链接库。动态链接库在程序编译时并不会被连接到目标代码中,而是在程序运行时才被载入。
动态库连接到系统空间,如果多个程序连接了同一个库,那么只需要一份,优点在于编译程序的时候不会将对应的库文件全部打包在生成的程序中,而是保留了到对应库的链接,缺点就是移植的时候如果只移动了对应的程序没有安装相关的库的话,就会看到类似以下喜闻乐见的结果了。
在 Linux 下一个动态库有y三个不同名字的文件组成:
当程序在内部列出所需要的链接库时,仅仅使用 soname。当你创建一个链接库时,使用 real name。安装一个新的链接库时,把它复制到一个DLL文件夹里,然后运行程序 ldconfig。ldconfig 检查存在的 real name 文件,并且创建指向它符号链接 soname 文件。可能大家比较常见到的有 libsodium 等。
有了上面关于库的一些基础知识之后,我们可以开始尝试创建一个动态库来供程序使用了。
比如我们有一个求最大值的函数 max(int a,int b,int c) ,放在文件 max.c 中文件内容如下:
可以通过:
将其编译为共享库,-fPIC是编译选项,PIC是 Position Independent Code 的缩写,表示要生成位置无关的代码,这是动态库需要的特性; -shared是链接选项,告诉 gcc 生成动态库而不是可执行文件。为了让用户知道我们的动态库中有哪些接口可用,我们需要编写对应的头文件,比如可以写一个 max.h :
设置一个驱动函数来测试我们编写的动态库:
通过 gcc test.c -L. -lmax来生成 a.out,其中-lmax表示要链接 libmax.so,-L.表示搜索要链接的库文件时包含当前路径。
但是这样直接运行的话,会出现一个错误:
由于 Linux 是通过/etc/ld.so.cache文件搜寻要链接的动态库的,而 /etc/ld.so.cache 是 ldconfig 程序读取 /etc/ld.so.conf 文件生成的,本次使用的动态库 libmax.so 并不在对应的目录下,就会导致程序无法找到对应的动态链接库,这样我们的解决方法有二:
小结
动态链接库是各个系统中的一个重要的组成部分且在 Linux 开发相关领域中尤为重要,也是一个面试的高频考点,除了动态链接库以外,还有以下相关知识也是高频考点,在面试前一定要准备好:
本文作者:Nova Kwok
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)