Linux(debian系)C/C++开发入门

发现很多人对于在Linux下编程有点蒙,就大概写一下吧。

apt-file仅存在于debian系,但其他的包管理工具应该也提供了类似功能,可以类比使用。


IDE

Linux下的IDE大概就idea家的那几个、vscode、eclipise和qtcreator,随便挑一个顺手的就行。


常用工具

apt-file

可能当前你开发的东西是从win迁移过来的,你想找一下Linux是否有对应的头文件,头文件在哪,就会用到这个命令。
首先安装该命令并更新缓存:

sudo apt install apt-file
sudo apt-file update

然后就可以使用了,例如查找uchar.h在哪个包里:

apt-file search uchar.h
cppreference-doc-en-html: /usr/share/cppreference/doc/html/en/cpp/header/cuchar.html
frama-c-base: /usr/share/frama-c/libc/uchar.h
gnuradio-dev: /usr/include/gnuradio/blocks/float_to_uchar.h
gnuradio-doc: /usr/share/doc/gnuradio-doc/html/classgr_1_1blocks_1_1float__to__uchar.html
libc6-dev: /usr/include/uchar.h
libc6-dev-amd64-cross: /usr/x86_64-linux-gnu/include/uchar.h
libc6-dev-arm64-cross: /usr/aarch64-linux-gnu/include/uchar.h
libc6-dev-armel-cross: /usr/arm-linux-gnueabi/include/uchar.h
libc6-dev-armhf-cross: /usr/arm-linux-gnueabihf/include/uchar.h
libc6-dev-hppa-cross: /usr/hppa-linux-gnu/include/uchar.h
libc6-dev-i386-cross: /usr/i686-linux-gnu/include/uchar.h
libc6-dev-m68k-cross: /usr/m68k-linux-gnu/include/uchar.h
libc6-dev-mips-cross: /usr/mips-linux-gnu/include/uchar.h
libc6-dev-mips64-cross: /usr/mips64-linux-gnuabi64/include/uchar.h
libc6-dev-mips64el-cross: /usr/mips64el-linux-gnuabi64/include/uchar.h
libc6-dev-mips64r6-cross: /usr/mipsisa64r6-linux-gnuabi64/include/uchar.h
libc6-dev-mips64r6el-cross: /usr/mipsisa64r6el-linux-gnuabi64/include/uchar.h
libc6-dev-mipsel-cross: /usr/mipsel-linux-gnu/include/uchar.h
libc6-dev-mipsn32-cross: /usr/mips64-linux-gnuabin32/include/uchar.h
libc6-dev-mipsn32el-cross: /usr/mips64el-linux-gnuabin32/include/uchar.h
libc6-dev-mipsn32r6-cross: /usr/mipsisa64r6-linux-gnuabin32/include/uchar.h
libc6-dev-mipsn32r6el-cross: /usr/mipsisa64r6el-linux-gnuabin32/include/uchar.h
libc6-dev-mipsr6-cross: /usr/mipsisa32r6-linux-gnu/include/uchar.h
libc6-dev-mipsr6el-cross: /usr/mipsisa32r6el-linux-gnu/include/uchar.h
libc6-dev-powerpc-cross: /usr/powerpc-linux-gnu/include/uchar.h
libc6-dev-powerpcspe-cross: /usr/powerpc-linux-gnuspe/include/uchar.h
libc6-dev-ppc64-cross: /usr/powerpc64-linux-gnu/include/uchar.h
libc6-dev-ppc64el-cross: /usr/powerpc64le-linux-gnu/include/uchar.h
libc6-dev-riscv64-cross: /usr/riscv64-linux-gnu/include/uchar.h
libc6-dev-s390x-cross: /usr/s390x-linux-gnu/include/uchar.h
libc6-dev-sh4-cross: /usr/sh4-linux-gnu/include/uchar.h
libc6-dev-sparc64-cross: /usr/sparc64-linux-gnu/include/uchar.h
libc6-dev-x32-cross: /usr/x86_64-linux-gnux32/include/uchar.h

可以看到搜索出了一堆结果,如果我想交叉编译arm64的应用,那么我只需安装libc6-dev-arm64-cross

sudo apt install libc6-dev-arm64-cross

pkg-config

这是用于简化编译选项的,如果你要编译一个gtk+-3.0的应用,那么你需要的编译选项是:

-pthread -I/usr/include/gtk-3.0 -I/usr/include/at-spi2-atk/2.0 -I/usr/include/at-spi-2.0 -I/usr/include/dbus-1.0 -I/usr/lib/x86_64-linux-gnu/dbus-1.0/include -I/usr/include/gtk-3.0 -I/usr/include/gio-unix-2.0 -I/usr/include/cairo -I/usr/include/libdrm -I/usr/include/pango-1.0 -I/usr/include/harfbuzz -I/usr/include/pango-1.0 -I/usr/include/fribidi -I/usr/include/atk-1.0 -I/usr/include/cairo -I/usr/include/pixman-1 -I/usr/include/freetype2 -I/usr/include/libpng16 -I/usr/include/gdk-pixbuf-2.0 -I/usr/include/libmount -I/usr/include/blkid -I/usr/include/uuid -I/usr/include/glib-2.0 -I/usr/lib/x86_64-linux-gnu/glib-2.0/include -lgtk-3 -lgdk-3 -lpangocairo-1.0 -lpango-1.0 -latk-1.0 -lcairo-gobject -lcairo -lgdk_pixbuf-2.0 -lgio-2.0 -lgobject-2.0 -lglib-2.0

这显然是反人类的,没人记得住这么多编译参数。所以就有了pkg-config这个工具,开发库的作者会将自己的编译选项写入.pc文件,而开发人员只需要调用pkg-config就可以简单的使用了:

pkg-config --libs --cflags gtk+-3.0

这条命令会输出上面那段繁杂的编译参数。所以编译命令就可以简单的写为:

gcc main.c `pkg-config --libs --cflags gtk+-3.0`

另外,你可以用pkg-config --list-all来查看当前已安装的开发库。

实际上macwindows也可以安装pkg-config并使用,只不过使用较少

所有支持Linux的构建工具都直接或者间接支持该功能:
AutoMake的关键字是PKG_CHECK_MODULES
CMakede的关键字是pkg_check_modules
QMake的关键字是PKGCONFIG
xmake的关键字是find_package
scons的关键字是env.ParseConfig


其他

除非必要,别在开发的时候用root权限,滥用root是一个非常差的习惯。

  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Debian GNU/Linux, Ubuntu Linux, Fedora Core / Red Hat Linux, OpenSUSE / SuSE Linux, 和 Mandrake Linux (现在称为Manjaro) 都是Linux发行版,它们各自有特色,用于满足不同用户的需求。 1. Debian GNU/Linux: 作为开源软件的基石,Debian以其稳定性、安全性以及严格的版本管理和软件质量控制而著名。它是许多其他发行版(如Ubuntu)的基础。 2. Ubuntu Linux: 是基于Debian的高级用户友好发行版,以其易于安装和使用、定期更新以及社区支持而知名。Ubuntu特别适合新手和企业环境。 3. Fedora Core / Red Hat Linux: Red Hat Linux已演变成Red Hat Enterprise Linux (RHEL),而Fedora则作为RHEL的开发分支。Fedora是滚动更新的,注重最新技术和创新,常被用作测试新软件和技术的平台。 4. OpenSUSE Linux: 始终以易用性和高度定制性著称,OpenSUSE提供了多个版本供选择,包括用于商业和个人用户的开源版本,以及针对服务器和嵌入式设备的定制版本。 5. Mandrake Linux (现为Manjaro): 曾经是Mandriva Linux的一个分支,后来独立出来。Manjaro以其友好的界面、轻量级以及对新手友好而闻名,它基于Arch Linux但提供了更平滑的用户体验。 如果你想深入了解这些发行版中的某个,或者它们之间的差异,可以关注它们的桌面环境(如GNOME、KDE、XFCE)、软件包管理器(如apt、dnf)、社区支持以及针对特定应用场景的定制程度。是否有特别感兴趣的地方?

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值