Unix/Linux C++应用开发-编译器g++的使用

本文介绍了Linux环境下g++编译器的基本使用方法,包括常见的编译选项及其用途,如生成object文件、指定输出文件名、包含文件及目录等。
 

    在Linux系统下,原先Windows系统下功能强大的集成IDE一去不复返了。虽然Linux系统也有相应的开发工具IDE,但是通常在代码开发、调试等都会在命令行式的Shell环境之下执行。因为Linux操作系统中命令行下提供的软件工具比图形化更加的强大。Linux系统中,C++编译器默认提供的是GNU的g++。下面简单讲述g++工具的基本使用情况,更加复杂的实际应用会在后续的实际项目实例中详细讲述。

    同样,g++编译器在Linux系统上依然是命令式的工具。掌握g++编译器的使用,就必须熟练掌握g++编译器工具的基本命令使用。表2-1是g++常用基本命令说明。

表2-1  g++常用命令

基本命令

使用说明

g++ -c 代码源文件

激活编译器预处理、编译以及汇编程序,将代码文件编译生成object工程文件

g++ 代码源文件 –o 可执行程序

默认情况下,g++编译出可执行目标程序,并命名为a.out。通常需要修改目标程序名,就是用-o选项

g++ 源代码 –include file

编译源文件时需要另一个文件,可以使用该选项,类似于代码中#include的功能。

g++ … -Idir

使用#include某个文件时,编译器通常会按照规定的顺序去寻找所需要的头文件。使用该选项之后,会让编译器优先在该选项后的目录下去寻找所需头文件,找不到的情况下再按系统默认的顺序去查找。

g++ -llibrary 源文件

编译的源文件需要使用库编译程序

g++ … -Ldir

编译的源文件时,需要搜寻库的路径。通常项目中库的定义往往会放在事先规划好的目录中,链接时指定其目录供使用。

g++ … -g

编译器编译时,产生调试信息

   

    这里简单的列出几个常用的命令选项说明,更多的会在后续实际使用中作详细的讲解,同时初学者也可以查阅Linux下man工具(帮助)来了解g++工具中的具体命令选项的使用。

22:56:27: 为项目keypad执行步骤 ... 22:56:27: 正在启动 "/usr/bin/make" clean rm -f moc_predefs.h rm -f moc_keytest.cpp rm -f ui_keytest.h rm -f keytest.o main.o moc_keytest.o rm -f *~ core *.core 22:56:27: 进程"/usr/bin/make"正常退出。 22:56:27: 正在启动 "/usr/bin/make" -Wno-unused-result /opt/aarch64-buildroot-linux-gnu_sdk-buildroot/bin/uic ../keyScan/keytest.ui -o ui_keytest.h /opt/aarch64-buildroot-linux-gnu_sdk-buildroot/bin/aarch64-buildroot-linux-gnu-g++ -c -pipe -D_LARGEFILE_SOURCE -D_LARGEFILE64_SOURCE -D_FILE_OFFSET_BITS=64 -Os -g0 -D_FORTIFY_SOURCE=1 --sysroot=/opt/aarch64-buildroot-linux-gnu_sdk-buildroot/aarch64-buildroot-linux-gnu/sysroot -Wno-unused-result -Wall -Wextra -D_REENTRANT -fPIC -DQT_QML_DEBUG -DQT_WIDGETS_LIB -DQT_GUI_LIB -DQT_CORE_LIB -I../keyScan -I. -I../keyScan -I/opt/aarch64-buildroot-linux-gnu_sdk-buildroot/aarch64-buildroot-linux-gnu/sysroot/usr/include/opencv4 -I/opt/aarch64-buildroot-linux-gnu_sdk-buildroot/aarch64-buildroot-linux-gnu/sysroot/usr/include/qt5 -I/opt/aarch64-buildroot-linux-gnu_sdk-buildroot/aarch64-buildroot-linux-gnu/sysroot/usr/include/qt5/QtWidgets -I/opt/aarch64-buildroot-linux-gnu_sdk-buildroot/aarch64-buildroot-linux-gnu/sysroot/usr/include/qt5/QtGui -I/opt/aarch64-buildroot-linux-gnu_sdk-buildroot/aarch64-buildroot-linux-gnu/sysroot/usr/include/qt5/QtCore -I. -I/opt/aarch64-buildroot-linux-gnu_sdk-buildroot/aarch64-buildroot-linux-gnu/sysroot/usr/include/libdrm -I. -I/opt/aarch64-buildroot-linux-gnu_sdk-buildroot/mkspecs/devices/linux-buildroot-g++ -o keytest.o ../keyScan/keytest.cpp ../keyScan/keytest.cpp: 在构造函数‘Keytest::Keytest(QWidget*)’中: ../keyScan/keytest.cpp:127:37: 警告: ‘%s’ directive output may be truncated writing up to 255 bytes into a region of size 53 [-Wformat-truncation=] 127 | "%s/%s", DEV_INPUT_EVENT, namelist[i]->d_name); | ^~ In file included from /opt/aarch64-buildroot-linux-gnu_sdk-buildroot/aarch64-buildroot-linux-gnu/sysroot/usr/include/stdio.h:906, from /opt/aarch64-buildroot-linux-gnu_sdk-buildroot/aarch64-buildroot-linux-gnu/include/c++/12.3.0/cstdio:42, from /opt/aarch64-buildroot-linux-gnu_sdk-buildroot/aarch64-buildroot-linux-gnu/include/c++/12.3.0/ext/string_conversions.h:43, from /opt/aarch64-buildroot-linux-gnu_sdk-buildroot/aarch64-buildroot-linux-gnu/include/c++/12.3.0/bits/basic_string.h:3968, from /opt/aarch64-buildroot-linux-gnu_sdk-buildroot/aarch64-buildroot-linux-gnu/include/c++/12.3.0/string:53, from /opt/aarch64-buildroot-linux-gnu_sdk-buildroot/aarch64-buildroot-linux-gnu/sysroot/usr/include/qt5/QtCore/qbytearray.h:52, from /opt/aarch64-buildroot-linux-gnu_sdk-buildroot/aarch64-buildroot-linux-gnu/sysroot/usr/include/qt5/QtCore/qstring.h:50, from /opt/aarch64-buildroot-linux-gnu_sdk-buildroot/aarch64-buildroot-linux-gnu/sysroot/usr/include/qt5/QtCore/qobject.h:47, from /opt/aarch64-buildroot-linux-gnu_sdk-buildroot/aarch64-buildroot-linux-gnu/sysroot/usr/include/qt5/QtWidgets/qwidget.h:45, from /opt/aarch64-buildroot-linux-gnu_sdk-buildroot/aarch64-buildroot-linux-gnu/sysroot/usr/include/qt5/QtWidgets/qdialog.h:44, from /opt/aarch64-buildroot-linux-gnu_sdk-buildroot/aarch64-buildroot-linux-gnu/sysroot/usr/include/qt5/QtWidgets/qmessagebox.h:45, from ../keyScan/keytest.cpp:3: 在函数‘int snprintf(char*, size_t, const char*, ...)’中, 内联自‘char* scan_devices()’于 ../keyScan/keytest.cpp:126:11, 内联自‘Keytest::Keytest(QWidget*)’于 ../keyScan/keytest.cpp:184:33: /opt/aarch64-buildroot-linux-gnu_sdk-buildroot/aarch64-buildroot-linux-gnu/sysroot/usr/include/bits/stdio2.h:54:35: 附注: ‘__builtin_snprintf’ output between 12 and 267 bytes into a destination of size 64 54 | return __builtin___snprintf_chk (__s, __n, __USE_FORTIFY_LEVEL - 1, | ~~~~~~~~~~~~~~~~~~~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 55 | __glibc_objsize (__s), __fmt, | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 56 | __va_arg_pack ()); | ~~~~~~~~~~~~~~~~~ /opt/aarch64-buildroot-linux-gnu_sdk-buildroot/bin/aarch64-buildroot-linux-gnu-g++ -c -pipe -D_LARGEFILE_SOURCE -D_LARGEFILE64_SOURCE -D_FILE_OFFSET_BITS=64 -Os -g0 -D_FORTIFY_SOURCE=1 --sysroot=/opt/aarch64-buildroot-linux-gnu_sdk-buildroot/aarch64-buildroot-linux-gnu/sysroot -Wno-unused-result -Wall -Wextra -D_REENTRANT -fPIC -DQT_QML_DEBUG -DQT_WIDGETS_LIB -DQT_GUI_LIB -DQT_CORE_LIB -I../keyScan -I. -I../keyScan -I/opt/aarch64-buildroot-linux-gnu_sdk-buildroot/aarch64-buildroot-linux-gnu/sysroot/usr/include/opencv4 -I/opt/aarch64-buildroot-linux-gnu_sdk-buildroot/aarch64-buildroot-linux-gnu/sysroot/usr/include/qt5 -I/opt/aarch64-buildroot-linux-gnu_sdk-buildroot/aarch64-buildroot-linux-gnu/sysroot/usr/include/qt5/QtWidgets -I/opt/aarch64-buildroot-linux-gnu_sdk-buildroot/aarch64-buildroot-linux-gnu/sysroot/usr/include/qt5/QtGui -I/opt/aarch64-buildroot-linux-gnu_sdk-buildroot/aarch64-buildroot-linux-gnu/sysroot/usr/include/qt5/QtCore -I. -I/opt/aarch64-buildroot-linux-gnu_sdk-buildroot/aarch64-buildroot-linux-gnu/sysroot/usr/include/libdrm -I. -I/opt/aarch64-buildroot-linux-gnu_sdk-buildroot/mkspecs/devices/linux-buildroot-g++ -o main.o ../keyScan/main.cpp /opt/aarch64-buildroot-linux-gnu_sdk-buildroot/bin/aarch64-buildroot-linux-gnu-g++ -pipe -D_LARGEFILE_SOURCE -D_LARGEFILE64_SOURCE -D_FILE_OFFSET_BITS=64 -Os -g0 -D_FORTIFY_SOURCE=1 --sysroot=/opt/aarch64-buildroot-linux-gnu_sdk-buildroot/aarch64-buildroot-linux-gnu/sysroot -Wno-unused-result -Wall -Wextra -dM -E -o moc_predefs.h /opt/aarch64-buildroot-linux-gnu_sdk-buildroot/mkspecs/features/data/dummy.cpp /opt/aarch64-buildroot-linux-gnu_sdk-buildroot/bin/moc -DQT_QML_DEBUG -DQT_WIDGETS_LIB -DQT_GUI_LIB -DQT_CORE_LIB --include /home/zpl/桌面/build-keypad-OK3562-Debug/moc_predefs.h -I/opt/aarch64-buildroot-linux-gnu_sdk-buildroot/mkspecs/devices/linux-buildroot-g++ -I/home/zpl/桌面/keyScan -I/home/zpl/桌面/keyScan -I/opt/aarch64-buildroot-linux-gnu_sdk-buildroot/aarch64-buildroot-linux-gnu/sysroot/usr/include/opencv4 -I/opt/aarch64-buildroot-linux-gnu_sdk-buildroot/aarch64-buildroot-linux-gnu/sysroot/usr/include/qt5 -I/opt/aarch64-buildroot-linux-gnu_sdk-buildroot/aarch64-buildroot-linux-gnu/sysroot/usr/include/qt5/QtWidgets -I/opt/aarch64-buildroot-linux-gnu_sdk-buildroot/aarch64-buildroot-linux-gnu/sysroot/usr/include/qt5/QtGui -I/opt/aarch64-buildroot-linux-gnu_sdk-buildroot/aarch64-buildroot-linux-gnu/sysroot/usr/include/qt5/QtCore -I. -I/opt/aarch64-buildroot-linux-gnu_sdk-buildroot/aarch64-buildroot-linux-gnu/include/c++/12.3.0 -I/opt/aarch64-buildroot-linux-gnu_sdk-buildroot/aarch64-buildroot-linux-gnu/include/c++/12.3.0/aarch64-buildroot-linux-gnu -I/opt/aarch64-buildroot-linux-gnu_sdk-buildroot/aarch64-buildroot-linux-gnu/include/c++/12.3.0/backward -I/opt/aarch64-buildroot-linux-gnu_sdk-buildroot/lib/gcc/aarch64-buildroot-linux-gnu/12.3.0/include -I/opt/aarch64-buildroot-linux-gnu_sdk-buildroot/lib/gcc/aarch64-buildroot-linux-gnu/12.3.0/include-fixed -I/opt/aarch64-buildroot-linux-gnu_sdk-buildroot/aarch64-buildroot-linux-gnu/include -I/opt/aarch64-buildroot-linux-gnu_sdk-buildroot/aarch64-buildroot-linux-gnu/sysroot/usr/include ../keyScan/keytest.h -o moc_keytest.cpp /opt/aarch64-buildroot-linux-gnu_sdk-buildroot/bin/aarch64-buildroot-linux-gnu-g++ -c -pipe -D_LARGEFILE_SOURCE -D_LARGEFILE64_SOURCE -D_FILE_OFFSET_BITS=64 -Os -g0 -D_FORTIFY_SOURCE=1 --sysroot=/opt/aarch64-buildroot-linux-gnu_sdk-buildroot/aarch64-buildroot-linux-gnu/sysroot -Wno-unused-result -Wall -Wextra -D_REENTRANT -fPIC -DQT_QML_DEBUG -DQT_WIDGETS_LIB -DQT_GUI_LIB -DQT_CORE_LIB -I../keyScan -I. -I../keyScan -I/opt/aarch64-buildroot-linux-gnu_sdk-buildroot/aarch64-buildroot-linux-gnu/sysroot/usr/include/opencv4 -I/opt/aarch64-buildroot-linux-gnu_sdk-buildroot/aarch64-buildroot-linux-gnu/sysroot/usr/include/qt5 -I/opt/aarch64-buildroot-linux-gnu_sdk-buildroot/aarch64-buildroot-linux-gnu/sysroot/usr/include/qt5/QtWidgets -I/opt/aarch64-buildroot-linux-gnu_sdk-buildroot/aarch64-buildroot-linux-gnu/sysroot/usr/include/qt5/QtGui -I/opt/aarch64-buildroot-linux-gnu_sdk-buildroot/aarch64-buildroot-linux-gnu/sysroot/usr/include/qt5/QtCore -I. -I/opt/aarch64-buildroot-linux-gnu_sdk-buildroot/aarch64-buildroot-linux-gnu/sysroot/usr/include/libdrm -I. -I/opt/aarch64-buildroot-linux-gnu_sdk-buildroot/mkspecs/devices/linux-buildroot-g++ -o moc_keytest.o moc_keytest.cpp /opt/aarch64-buildroot-linux-gnu_sdk-buildroot/bin/aarch64-buildroot-linux-gnu-g++ --sysroot=/opt/aarch64-buildroot-linux-gnu_sdk-buildroot/aarch64-buildroot-linux-gnu/sysroot -o fltest_qt_keypad keytest.o main.o moc_keytest.o -latomic -L/opt/aarch64-buildroot-linux-gnu_sdk-buildroot/aarch64-buildroot-linux-gnu/sysroot/usr/lib -lopencv_core -lopencv_imgproc -lopencv_highgui -lopencv_imgcodecs /opt/aarch64-buildroot-linux-gnu_sdk-buildroot/aarch64-buildroot-linux-gnu/sysroot/usr/lib/libQt5Widgets.so /opt/aarch64-buildroot-linux-gnu_sdk-buildroot/aarch64-buildroot-linux-gnu/sysroot/usr/lib/libQt5Gui.so /opt/aarch64-buildroot-linux-gnu_sdk-buildroot/aarch64-buildroot-linux-gnu/sysroot/usr/lib/libQt5Core.so -lmali-hook -lmali-hook-injector -lmali -ldrm -lwayland-client -lwayland-server -lpthread -lrt -lpthread -ldl 22:56:33: 进程"/usr/bin/make"正常退出。 22:56:33: 正在启动 "/opt/aarch64-buildroot-linux-gnu_sdk-buildroot/bin/qmake" /home/zpl/桌面/keyScan/keypad.pro -spec devices/linux-buildroot-g++ CONFIG+=debug CONFIG+=qml_debug QMAKE_CXXFLAGS += -w Usage: /opt/aarch64-buildroot-linux-gnu_sdk-buildroot/bin/qmake [mode] [options] [files] QMake has two modes, one mode for generating project files based on some heuristics, and the other for generating makefiles. Normally you shouldn't need to specify a mode, as makefile generation is the default mode for qmake, but you may use this to test qmake on an existing project Mode: -project Put qmake into project file generation mode In this mode qmake interprets [files] as files to be added to the .pro file. By default, all files with known source extensions are added. Note: The created .pro file probably will need to be edited. For example add the QT variable to specify what modules are required. -makefile Put qmake into makefile generation mode (default) In this mode qmake interprets files as project files to be processed, if skipped qmake will try to find a project file in your current working directory Warnings Options: -Wnone Turn off all warnings; specific ones may be re-enabled by later -W options -Wall Turn on all warnings -Wparser Turn on parser warnings -Wlogic Turn on logic warnings (on by default) -Wdeprecated Turn on deprecation warnings (on by default) Options: * You can place any variable assignment in options and it will be * * processed as if it was in [files]. These assignments will be * * processed before [files] by default. * -o file Write output to file -d Increase debug level -t templ Overrides TEMPLATE as templ -tp prefix Overrides TEMPLATE so that prefix is prefixed into the value -help This help -v Version information -early All subsequent variable assignments will be parsed right before default_pre.prf -before All subsequent variable assignments will be parsed right before [files] (the default) -after All subsequent variable assignments will be parsed after [files] -late All subsequent variable assignments will be parsed right after default_post.prf -norecursive Don't do a recursive search -recursive Do a recursive search -set <prop> <value> Set persistent property -unset <prop> Unset persistent property -query <prop> Query persistent property. Show all if <prop> is empty. -qtconf file Use file instead of looking for qt.conf -cache file Use file as cache [makefile mode only] -spec spec Use spec as QMAKESPEC [makefile mode only] -nocache Don't use a cache file [makefile mode only] -nodepend Don't generate dependencies [makefile mode only] -nomoc Don't generate moc targets [makefile mode only] -nopwd Don't look for files in pwd [project mode only] ***Unknown option -w 22:56:33: 进程"/opt/aarch64-buildroot-linux-gnu_sdk-buildroot/bin/qmake"退出,退出代码 1 。 Error while building/deploying project keypad (kit: OK3562) The kit OK3562 has configuration issues which might be the root cause for this problem. When executing step "qmake" 22:56:33: Elapsed time: 00:05.
08-31
-- The C compiler identification is GNU 9.4.0 -- The CXX compiler identification is GNU 9.4.0 -- Check for working C compiler: /usr/bin/cc -- Check for working C compiler: /usr/bin/cc -- works -- Detecting C compiler ABI info -- Detecting C compiler ABI info - done -- Detecting C compile features -- Detecting C compile features - done -- Check for working CXX compiler: /usr/bin/g++ -- Check for working CXX compiler: /usr/bin/g++ -- works -- Detecting CXX compiler ABI info -- Detecting CXX compiler ABI info - done -- Detecting CXX compile features -- Detecting CXX compile features - done -- cmake version: 3.16.3 -- Found PkgConfig: /usr/bin/pkg-config (found version "0.29.1") -- tests using vcan0 are available. -- *** Host Build Architecture is x86_64 -- Setting C++17 standard via cmake standard mechanism -- Final compiler options: -- CMAKE_CXX_FLAGS: -- CMAKE_CXX_FLAGS_DEBUG: -g -- CMAKE_CXX_FLAGS_MINSIZEREL: -Os -DNDEBUG -- CMAKE_CXX_FLAGS_RELEASE: -O3 -DNDEBUG -- CMAKE_CXX_FLAGS_RELWITHDEBINFO: -O2 -g -DNDEBUG -- Building version 5.13.0 -- *** Staging to build opencpn 5.13.0 *** -- *** Package will NOT include documentation *** -- Checking for module 'gtk+-3.0' -- Found gtk+-3.0, version 3.24.20 -- Found GTK3: /usr/include/gtk-3.0;/usr/include/at-spi2-atk/2.0;/usr/include/at-spi-2.0;/usr/include/dbus-1.0;/usr/lib/x86_64-linux-gnu/dbus-1.0/include;/usr/include/gtk-3.0;/usr/include/gio-unix-2.0;/usr/include/cairo;/usr/include/pango-1.0;/usr/include/fribidi;/usr/include/harfbuzz;/usr/include/atk-1.0;/usr/include/cairo;/usr/include/pixman-1;/usr/include/uuid;/usr/include/freetype2;/usr/include/libpng16;/usr/include/gdk-pixbuf-2.0;/usr/include/libmount;/usr/include/blkid;/usr/include/glib-2.0;/usr/lib/x86_64-linux-gnu/glib-2.0/include -- Building against GTK3... -- Found OpenGL: /usr/lib/x86_64-linux-gnu/libOpenGL.so -- Found OpenGL.... -- GL Lib: /usr/lib/x86_64-linux-gnu/libGL.so/usr/lib/x86_64-linux-gnu/libGLU.so -- GL Include: /usr/include -- Revised GL Lib: /usr/lib/x86_64-linux-gnu/libGL.so -- Found GLEW: /usr/include (found version "2.1.0")
最新发布
10-11
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值