linux c/c++编程 xwindow

lib,dll区别

lib包含了函数所在的dll文件和文件中函数位置的信息(入口),代码由运行时加载在进程空间中的dll提供,称为动态链接库dynamic link library。(这种方式更灵活,写的程序体积小,但是需要.exe和dll同时发布)
lib包含函数代码本身,在编译时直接将代码加入程序当中,称为静态链接库static link library。(这种方式不是很灵活,因为lib被编译到.exe中,写出的程序体积大,但是只需要发布exe即可,不需要dll文件)

lib是编译时用到的,dll是运行时用到的。如果要完成源代码的编译,只需要lib;如果要使动态链接的程序运行起来,只需要dll。
如果有dll文件,那么lib一般是一些索引信息,记录了dll中函数的入口和位置,dll中是函数的具体内容;如果只有lib文件,那么这个lib文件是静态编译出来的,索引和实现都在其中。使用静态编译的lib文件,在运行程序时不需要再挂动态库,缺点是导致应用程序比较大,而且失去了动态库的灵活性,发布新版本时要发布新的应用程序才行。
动态链接的情况下,有两个文件:一个是LIB文件,一个是DLL文件。LIB包含被DLL导出的函数名称和位置,DLL包含实际的函数和数据,应用程序使用LIB文件链接到DLL文件。在应用程序的可执行文件中,存放的不是被调用的函数代码,而是DLL中相应函数代码的地址,从而节省了内存资源。DLL和LIB文件必须随应用程序一起发行,否则应用程序会产生错误。如果不想用lib文件或者没有lib文件,可以用WIN32 API函数LoadLibrary、GetProcAddress装载。

gcc g++

gcc既是一个项目名,也是项目中的一个程序名
代表 GNU编译器集合 主要用于编译C和c++语言。 它也可以用来编译目标C和c++目标。 所需的最重要的选项,编译源代码文件的源程序的名称,其他每一个参数是可选的像一个警告,调试、链接库对象文件等。GCC命令的不同选项允许用户停止编译过程的不同阶段。

g++命令 是一个GNU c++编译器调用命令,用于预处理、编译、汇编和链接的源代码来生成一个可执行文件。
gcc、g++都叫做 compiler driver 。这些都不负责编译代码,只负责调用真正的编译器(compiler proper)。gcc 这个项目中,真正负责编译 C 代码的程序叫做 cc1,负责编译 C++ 代码的程序叫做 cc1plus

作为程序的 gcc 和 g++ 的区别只在于对命令行参数的处理(也就是 g++ 默认加 -xc++ 、 -lstdc++ 之类。

g++ gcc
g++编译任何 . c 或 . cpp 文件,但他们只被视为c++文件。 gcc编译任何 . c 或 . cpp 文件,但他们将被视为分别C和c++。
命令通过g++编译c++程序 g++ 文件名.cpp – o 二进制 命令通过gcc编译C程序 gcc 文件名.c – o 二进制
使用g++链接对象文件,文件自动链接的标准c++库。 gcc不这样做。
g++编译有预定义的宏。 gcc编译c++文件有更多数量的预定义的宏。 有些是# define __GXX_WEAK 1 # define cplusplus 1 # define __DEPRECATED 1,等等

linux没有图形界面怎么办

作为服务端的系统,通常不会安装臃肿的图形界面。
那么如何在不安装图形界面的的情况下启动图形界面的?听起来很矛盾,但是实际上是可行的。
X Window System(常被简称为X11或X),是一套基于X display protocol的windowing system,X GUI环境的功能包括窗口的绘制、移动,以及与鼠标、键盘等输入设备的交互。
X采用C/S模型(这是关键):一个X server 和多个应用程序(client)通信。server接收client的请求绘制窗口,并将来自鼠标、键盘等设备的输入传递给client。 因此 X server和client可以位于同一计算机上,例如在Linux主机上使用KDE等桌面环境就是这种模式。X server也可以通过同构网络、异构网络或Internet与client通信。 X server与client之间的通信是不加密的,这个问题可以通过SSH解决。SSH是Secure Shell的简称,SSH可以看作是通信被加密压缩版的telnet。 需要用到SSH的forwarding功能,当X server与client所在计算机都支持SSH协议时,X server与client之间不安全的TCP/IP连接可以转送到(forwarding)二者之间建立的SSH连接上。
了解原理后,我们就可以在本地自建X服务,然后服务器作为X client,把绘图的请求发给本地的X server。 这样就实现了本地显示图像的目的。

X window
Unix Like 操作系统不是只能进行服务器的架设而已,在美编、排版、制图、多媒体应用上也是有其需要的。 这些需求都需要用到图形接口 (Graphical User Interface, GUI) 的操作的, 所以后来才有所谓的 X Window System 这玩意儿。那么为啥图形窗口接口要称为 X 呢?因为就英文字母来看 X 是在 W(indow) 后面,因此,人们就戏称这一版的窗口接口为 X 啰 (有下一版的新窗口之意)!

Gnome 和 KDE 是什么?
有人把 Gnome 和 KDE 叫做窗口管理器,甚至还有人把它们叫做 Xwindow。经常看到有人问:“装哪种 Xwindow 好啊?Gnome 还是 KDE?” 其实你不安装 Gnome 和 KDE 也可以使用 Xwindow.
Gnome 和 KDE 是“桌面系统”,一种很多程序和函数库的集合。它们的设计目的是提供一致的方便的操作方式来满足普通用户的需要。它们不但包含窗口管理器,还有很多实用程序和应用程序,比如配置程序,工具条,编辑器,绘图工具…… 其实 Gnome 可以和很多窗口管理器合作,在历史上,Gnome 使用过的窗口管理器包括 englightenment, sawmill, sawfish, metacity。KDE 的窗口管理器叫做 kwin。
你也知道,设计整整一套应用程序:编辑器,绘图程序,浏览器,…… 是非常不容易的。所以它们肯定是不如专用的编辑器,绘图程序,浏览器的。不过要求不太高的用户也可以用它们。

远程主机配置
你需要在你的远程主机上配置OpenSSH服务,启用X11 Forwarding。在OpenSSH的配置文件中(/etc/ssh/sshd_config),打开如下两项:
AllowTcpForwarding yes
X11Forwarding yes

本地Ubuntu主机配置
在Ubuntu桌面下,已经有X server在运行了,所以不需要任何配置,只需打开终端,然后执行如下ssh命令登录远程CentOS:
ssh -X 参数表示启用远程服务器的X window界面
Ubuntu系列桌面实际上有几种桌面应用程序,包括Ubuntu-desktop、Kubunut-desktop和Xubuntu-desktop。此方法操作最简单,但安装的软件太多了,不建议在服务器上使用此方法。

候选方法
sudo aptitude install ubuntu-desktop #GNOME

sudo apt-get install kubuntu-desktop #KDE

sudo apt-get install xubuntu-desktop #XFCE
1.安装x-windows的基础(必须):
sudo apt-get install x-window-system-core
2.安装gnome基础(必须):
sudo apt-get install gnome-core kde-core xfce4
3.安装中文显示(建议安装):
新版本中,中文安装有重大变化
apt install language-pack-gnome-zh #让gnome面板、菜单显示中文
apt install language-pack-zh
apt install language-support-zh-hans #中文语言包
apt install language-support-zh-hant
sudo apt-get install language-support-zh #中文语言支持
安装中文输入法
apt install ibus-pinyin
apt install ibus-libpinyin
apt install fcitx
进入图形界面:startx
退出图形桌面:ctrl + alt + backspace

终端编程

https://linux.fasionchan.com/zh_CN/latest/development-environment/c-cpp.html