基于mipsel编译Qt4.6.2版本

2024-03-27 02:32
文章标签 编译 版本 mipsel qt4.6

本文主要是介绍基于mipsel编译Qt4.6.2版本,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

1.使用的configure配置为:
./configure -embedded mips -little-endian -xplatform qws/linux-mips-g++ -prefix /opt/qte462-mips -release -opensource -confirm-license -webkit -qt-zlib -qt-libpng -qt-libjpeg -qt-gif -I$QTDIR/include/libz -L$QTDIR/lib -no-qt3support -make libs -nomake examples -nomake demos -no-multimedia -no-phonon -no-phonon-backend -no-accessibility -no-script -no-scripttools -qconfig ranger

之前使用的:
./configure -embedded mips -little-endian -xplatform qws/linux-mips-g++ -prefix /opt/qte450-mips -confirm-license -qt-zlib -qt-libpng -qt-libjpeg -qt-gif -I$QTDIR/include/libz -L$QTDIR/lib -no-qt3support -no-phonon -no-phonon-backend -no-accessibility -no-scripttools -qconfig ranger

针对4.5.0版本

./configure -embedded mips -little-endian -xplatform qws/linux-mips-g++ -prefix /opt/qte450-mips -confirm-license -qt-zlib -qt-libpng -qt-libjpeg -qt-gif -I$QTDIR/include/libz -L$QTDIR/lib -no-qt3support -nomake examples -nomake demos -no-webkit -no-phonon -no-phonon-backend -no-accessibility -no-scripttools -qconfig ranger

./configure -embedded arm -little-endian -xplatform qws/linux-arm-g++ -prefix /opt/qte450-3560e -confirm-license -qt-zlib -qt-libpng -qt-libjpeg -qt-gif  -no-qt3support -nomake examples -nomake demos -no-webkit -no-phonon -no-phonon-backend -no-accessibility -no-scripttools -qconfig ranger

2.在编译qtgui部分时遇到,但并不是每次都会遇到,在第一次编译时就不存在
mipsel-linux-g++ -c -include .pch/release-shared-emb-mips/QtGui -pipe -mips32 -fno-exceptions -O2 -fvisibility=hidden -fvisibility-inlines-hidden -Wall -W -D_REENTRANT -fPIC -DQT_SHARED -DQT_BUILD_GUI_LIB -DQT_NO_USING_NAMESPACE -DQT_NO_CAST_TO_ASCII -DQT_ASCII_CAST_WARNINGS -DQT_MOC_COMPAT -DPNG_NO_ASSEMBLER_CODE -DQT_NO_FONTCONFIG -DFT2_BUILD_LIBRARY -DFT_CONFIG_OPTION_SYSTEM_ZLIB -DQT_NO_OPENTYPE -DQT_NO_STYLE_MAC -DQT_NO_STYLE_WINDOWSVISTA -DQT_NO_STYLE_WINDOWSXP -DQT_NO_STYLE_GTK -DQT_NO_STYLE_WINDOWSCE -DQT_NO_STYLE_WINDOWSMOBILE -DQT_NO_STYLE_S60 -DQ_INTERNAL_QAPP_SRC -DQT_NO_DEBUG -DQT_NETWORK_LIB -DQT_CORE_LIB -D_LARGEFILE64_SOURCE -D_LARGEFILE_SOURCE -Ihttp://www.cnblogs.com/mkspecs/qws/linux-mips-g++ -I. -Ihttp://www.cnblogs.com/include/QtCore -Ihttp://www.cnblogs.com/include/QtNetwork -Ihttp://www.cnblogs.com/include -Ihttp://www.cnblogs.com/include/QtGui -I.rcc/release-shared-emb-mips -I../3rdparty/libpng -I../3rdparty/zlib -I../3rdparty/zlib -I../3rdparty/freetype/builds/unix -I../3rdparty/freetype/src -I../3rdparty/freetype/include -I../3rdparty/harfbuzz/src -Idialogs -I.moc/release-shared-emb-mips -I.uic/release-shared-emb-mips -o .obj/release-shared-emb-mips/qpnghandler.o image/qpnghandler.cpp
In file included from ../3rdparty/libpng/png.h:501,
                 from image/qpnghandler.cpp:53:
../3rdparty/libpng/pngconf.h:338: error: expected constructor, destructor, or type conversion before '.' token
../3rdparty/libpng/pngconf.h:339: error: '__dont__' does not name a type
make[1]: *** [.obj/release-shared-emb-mips/qpnghandler.o] 错误 1
make[1]:正在离开目录 `/home/yuchao/qte-4.6.2/src/gui'

网上提示:
http://forum.soft32.com/linux/conflict-ftstdlib-freetype-library-pngconf-ftopict439998.html
| /* If you encounter a compiler error here, see the explanation 
| * near the end of INSTALL. 
| */ 
Do anyone of you have a idea how to work around such problem? I read the 
INSTALL file. There are two suggestion: 
1. comment out following two lines: 
| __png.h__ already includes setjmp.h; 
| __dont__ include it again.; 
2. use cexcept interface but I don't understand that. 
我且将这两行注释掉。

3.编译QTScript的过程中
mipsel-linux-g++ -Wl,-rpath-link,/home/yuchao/qte-4.6.2/lib -fno-exceptions -Wl,--no-undefined -Wl,-O1 -Wl,-rpath,/opt/qte462-mips/lib -Wl,-rpath,/opt/qte462-mips/lib -shared -Wl,-soname,libQtScript.so.4 -o libQtScript.so.4.6.2 obj/release/pcre_compile.o obj/release/pcre_exec.o obj/release/pcre_tables.o obj/release/pcre_ucp_searchfuncs.o obj/release/pcre_xclass.o obj/release/Assertions.o obj/release/ByteArray.o obj/release/HashTable.o obj/release/MainThread.o obj/release/RandomNumber.o obj/release/RefCountedLeakCounter.o obj/release/TypeTraits.o obj/release/CollatorDefault.o obj/release/CollatorICU.o obj/release/UTF8.o obj/release/JSBase.o obj/release/JSCallbackConstructor.o obj/release/JSCallbackFunction.o obj/release/JSCallbackObject.o obj/release/JSClassRef.o obj/release/JSContextRef.o obj/release/JSObjectRef.o obj/release/JSStringRef.o obj/release/JSValueRef.o obj/release/OpaqueJSString.o obj/release/InitializeThreading.o obj/release/JSGlobalData.o obj/release/JSGlobalObject.o obj/release/JSStaticScopeObject.o obj/release/JSVariableObject.o obj/release/JSActivation.o obj/release/JSNotAnObject.o obj/release/JSONObject.o obj/release/LiteralParser.o obj/release/MarkStack.o obj/release/TimeoutChecker.o obj/release/CodeBlock.o obj/release/StructureStubInfo.o obj/release/JumpTable.o obj/release/ARMAssembler.o obj/release/MacroAssemblerARM.o obj/release/JIT.o obj/release/JITCall.o obj/release/JITArithmetic.o obj/release/JITOpcodes.o obj/release/JITPropertyAccess.o obj/release/ExecutableAllocator.o obj/release/JITStubs.o obj/release/BytecodeGenerator.o obj/release/ExceptionHelpers.o obj/release/JSPropertyNameIterator.o obj/release/Interpreter.o obj/release/Opcode.o obj/release/SamplingTool.o obj/release/RegexCompiler.o obj/release/RegexInterpreter.o obj/release/RegexJIT.o obj/release/RegisterFile.o obj/release/ExecutableAllocatorPosix.o obj/release/MarkStackPosix.o obj/release/TCSystemAlloc.o obj/release/ArgList.o obj/release/Arguments.o obj/release/ArrayConstructor.o obj/release/ArrayPrototype.o obj/release/BooleanConstructor.o obj/release/BooleanObject.o obj/release/BooleanPrototype.o obj/release/CallData.o obj/release/Collector.o obj/release/CommonIdentifiers.o obj/release/ConstructData.o obj/release/CurrentTime.o obj/release/DateConstructor.o obj/release/DateConversion.o obj/release/DateInstance.o obj/release/DatePrototype.o obj/release/Debugger.o obj/release/DebuggerCallFrame.o obj/release/DebuggerActivation.o obj/release/dtoa.o obj/release/Error.o obj/release/ErrorConstructor.o obj/release/ErrorInstance.o obj/release/ErrorPrototype.o obj/release/CallFrame.o obj/release/Executable.o obj/release/FunctionConstructor.o obj/release/FunctionPrototype.o obj/release/GetterSetter.o obj/release/GlobalEvalFunction.o obj/release/Identifier.o obj/release/InternalFunction.o obj/release/Completion.o obj/release/JSArray.o obj/release/JSAPIValueWrapper.o obj/release/JSByteArray.o obj/release/JSCell.o obj/release/JSFunction.o obj/release/JSGlobalObjectFunctions.o obj/release/JSImmediate.o obj/release/JSLock.o obj/release/JSNumberCell.o obj/release/JSObject.o obj/release/JSString.o obj/release/JSValue.o obj/release/JSWrapperObject.o obj/release/Lexer.o obj/release/Lookup.o obj/release/MathObject.o obj/release/NativeErrorConstructor.o obj/release/NativeErrorPrototype.o obj/release/Nodes.o obj/release/NumberConstructor.o obj/release/NumberObject.o obj/release/NumberPrototype.o obj/release/ObjectConstructor.o obj/release/ObjectPrototype.o obj/release/Operations.o obj/release/Parser.o obj/release/ParserArena.o obj/release/PropertyDescriptor.o obj/release/PropertyNameArray.o obj/release/PropertySlot.o obj/release/PrototypeFunction.o obj/release/RegExp.o obj/release/RegExpConstructor.o obj/release/RegExpObject.o obj/release/RegExpPrototype.o obj/release/ScopeChain.o obj/release/SmallStrings.o obj/release/StringConstructor.o obj/release/StringObject.o obj/release/StringPrototype.o obj/release/Structure.o obj/release/StructureChain.o obj/release/UString.o obj/release/HeavyProfile.o obj/release/Profile.o obj/release/ProfileGenerator.o obj/release/ProfileNode.o obj/release/Profiler.o obj/release/TreeProfile.o obj/release/DateMath.o obj/release/FastMalloc.o obj/release/Threading.o obj/release/MainThreadQt.o obj/release/ThreadingQt.o obj/release/Grammar.o obj/release/qscriptclass.o obj/release/qscriptclasspropertyiterator.o obj/release/qscriptcontext.o obj/release/qscriptcontextinfo.o obj/release/qscriptengine.o obj/release/qscriptengineagent.o obj/release/qscriptextensionplugin.o obj/release/qscriptprogram.o obj/release/qscriptstring.o obj/release/qscriptvalue.o obj/release/qscriptvalueiterator.o obj/release/qscriptable.o obj/release/qscriptfunction.o obj/release/qscriptobject.o obj/release/qscriptclassobject.o obj/release/qscriptvariant.o obj/release/qscriptqobject.o obj/release/qscriptglobalobject.o obj/release/qscriptactivationobject.o obj/release/qscriptdeclarativeobject.o obj/release/qscriptdeclarativeclass.o obj/release/qscriptast.o obj/release/qscriptastvisitor.o obj/release/qscriptgrammar.o obj/release/qscriptsyntaxchecker.o obj/release/qscriptlexer.o obj/release/qscriptdate.o obj/release/moc_qscriptextensionplugin.o   -L/home/yuchao/qte-4.6.2/lib -lQtCore -L/home/yuchao/qte-4.6.2/lib -lpthread  
obj/release/JSValue.o: In function `QTJSC::toUInt32SlowCase(double, bool&)':
JSValue.cpp:(.text+0x114): undefined reference to `trunc'
obj/release/JSValue.o: In function `QTJSC::toInt32SlowCase(double, bool&)':
JSValue.cpp:(.text+0x244): undefined reference to `trunc'
obj/release/JSValue.o: In function `QTJSC::JSValue::toInteger(QTJSC::ExecState*) const':
JSValue.cpp:(.text+0x374): undefined reference to `trunc'
obj/release/JSValue.o: In function `QTJSC::JSValue::toIntegerPreserveNaN(QTJSC::ExecState*) const':
JSValue.cpp:(.text+0x3ec): undefined reference to `trunc'
obj/release/DateMath.o: In function `QTWTF::timeClip(double)':
DateMath.cpp:(.text+0x30c): undefined reference to `trunc'
collect2: ld returned 1 exit status
make: *** [http://www.cnblogs.com/lib/libQtScript.so.4.6.2] 错误 1

在QTScript中引用的是src/3dparty/javascriptcore的文件,故将相应目录*/JavaScriptCore/wtf/MathExtras.h中将trunc定义打开后trunc问题ok
4.webkit库链接:
并且可以看到它只需要链接的qt库为: -L/home/yuchao/qte-4.6.2/lib -lQtGui -L/home/yuchao/qte-4.6.2/lib -lQtNetwork -lQtCore

rm -f libQtWebKit.so.4.6.2 libQtWebKit.so libQtWebKit.so.4 libQtWebKit.so.4.6
mips-linux-g++ -Wl,-rpath-link,/home/yuchao/qte-4.6.2/lib -fno-exceptions -Wl,--no-undefined -Wl,--gc-sections -Wl,-O1 -Wl,-rpath,/opt/qte462-mips/lib -Wl,-rpath,/opt/qte462-mips/lib -shared -Wl,-soname,libQtWebKit.so.4 -o libQtWebKit.so.4.6.2 obj/release/pcre_compile.o obj/release/pcre_exec.o obj/release/pcre_tables.o obj/release/pcre_ucp_searchfuncs.o obj/release/pcre_xclass.o obj/release/Assertions.o obj/release/ByteArray.o obj/release/HashTable.o obj/release/MainThread.o obj/release/RandomNumber.o obj/release/RefCountedLeakCounter.o obj/release/TypeTraits.o obj/release/CollatorDefault.o obj/release/CollatorICU.o obj/release/UTF8.o obj/release/JSBase.o obj/release/JSCallbackConstructor.o obj/release/JSCallbackFunction.o obj/release/JSCallbackObject.o obj/release/JSClassRef.o obj/release/JSContext
..................... 
..................... 
j/release/JSSVGTransform.o obj/release/JSSVGTransformList.o obj/release/JSSVGTRefElement.o obj/release/JSSVGTSpanElement.o obj/release/JSSVGUnitTypes.o obj/release/JSSVGUseElement.o obj/release/JSSVGViewElement.o obj/release/JSWebSocket.o obj/release/JSAbstractWorker.o obj/release/JSDedicatedWorkerContext.o obj/release/JSSharedWorker.o obj/release/JSSharedWorkerContext.o obj/release/JSWorker.o obj/release/JSWorkerContext.o obj/release/JSWorkerLocation.o obj/release/JSDOMParser.o obj/release/JSXMLHttpRequest.o obj/release/JSXMLHttpRequestException.o obj/release/JSXMLHttpRequestProgressEvent.o obj/release/JSXMLHttpRequestUpload.o obj/release/JSXMLSerializer.o obj/release/JSXPathNSResolver.o obj/release/JSXPathException.o obj/release/JSXPathExpression.o obj/release/JSXPathResult.o obj/release/JSXPathEvaluator.o obj/release/JSXSLTProcessor.o obj/release/CSSGrammar.o obj/release/HTMLNames.o obj/release/HTMLElementFactory.o obj/release/JSHTMLElementWrapperFactory.o obj/release/XMLNames.o obj/release/UserAgentStyleSheetsData.o obj/release/XPathGrammar.o obj/release/moc_qwebplugindatabase_p.o obj/release/moc_DnsPrefetchHelper.o obj/release/moc_qwebframe.o obj/release/moc_qwebhistoryinterface.o obj/release/moc_qwebpluginfactory.o obj/release/moc_qwebinspector.o obj/release/qrc_WebCore.o obj/release/qrc_WebKit.o   -L/home/yuchao/qte-4.6.2/lib -lQtGui -L/home/yuchao/qte-4.6.2/lib -lQtNetwork -lQtCore -lpthread  
obj/release/Collector.o: In function `JSC::Heap::markCurrentThreadConservativelyInternal(JSC::MarkStack&)':
Collector.cpp:(.text._ZN3JSC4Heap39markCurrentThreadConservativelyInternalERNS_9MarkStackE+0x74): undefined reference to `__libc_stack_end'
obj/release/JSValue.o: In function `JSC::toUInt32SlowCase(double, bool&)':
JSValue.cpp:(.text._ZN3JSC16toUInt32SlowCaseEdRb+0xf8): undefined reference to `trunc'
obj/release/JSValue.o: In function `JSC::toInt32SlowCase(double, bool&)':
JSValue.cpp:(.text._ZN3JSC15toInt32SlowCaseEdRb+0xc0): undefined reference to `trunc'
obj/release/JSValue.o: In function `JSC::JSValue::toInteger(JSC::ExecState*) const':
JSValue.cpp:(.text._ZNK3JSC7JSValue9toIntegerEPNS_9ExecStateE+0xc0): undefined reference to `trunc'
obj/release/JSValue.o: In function `JSC::JSValue::toIntegerPreserveNaN(JSC::ExecState*) const':
JSValue.cpp:(.text._ZNK3JSC7JSValue20toIntegerPreserveNaNEPNS_9ExecStateE+0x3c): undefined reference to `trunc'
obj/release/DateMath.o: In function `WTF::timeClip(double)':
DateMath.cpp:(.text._ZN3WTF8timeClipEd+0x5c): undefined reference to `trunc'
obj/release/qt_runtime.o:qt_runtime.cpp:(.text._ZN3JSC8Bindings22convertQVariantToValueEPNS_9ExecStateEN3WTF10PassRefPtrINS0_10RootObjectEEERK8QVariant+0x4d0): more undefined references to `trunc' follow
collect2: ld returned 1 exit status
make[1]: *** [http://www.cnblogs.com/http://www.cnblogs.com/lib/libQtWebKit.so.4.6.2] 错误 1
make[1]:正在离开目录 `/home/yuchao/qte-4.6.2/src/3rdparty/webkit/WebCore'
make: *** [sub-webkit-make_default-ordered] 错误 2

(1)在src/3rdparty/webkit/JavaScriptCore/wtf/MathExtras.h中将trunc定义打开后
     trunc问题ok
(2)undefined reference to `__libc_stack_end
  在Collector.cpp将UCLIBC_USE_PROC_SELF_MAPS定义关闭
  但在4.5版本中是否遇到这个问题,还是修改了其他宏如__UCLIBC__:
#ifdef __UCLIBC__ 
// versions of uClibc 0.9.28 and below do not have // pthread_getattr_np or pthread_attr_getstack. 
#if __UCLIBC_MAJOR__ == 0 && \ 
    (__UCLIBC_MINOR__ < 9 || \ 
     (__UCLIBC_MINOR__ == 9 && __UCLIBC_SUBLEVEL__ <= 30))
#define UCLIBC_USE_PROC_SELF_MAPS 1
#include <stdio_ext.h> 
extern int *__libc_stack_end;
#endif
#endif

++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

网上参考:QtEmbedded在MIPS平台编译的一个常见错误
http://www.cuteqt.com/blog/?p=911
此外见http://www.qtcn.org/bbs/read.php?tid=26709&page=2

本站所有文章由本站和原作者保留一切权力,仅在保留本版权信息、原文链接、原文作者的情况下允许转载,转载请勿删改原文内容, 并不得用于商业用途。 谢谢合作。 
原文链接:QtEmbedded在MIPS平台编译的一个常见错误

错误输出为
libQtWebKit.so: undefined reference to `trunc’
libQtWebKit.so: undefined reference to `lroundf’
libQtWebKit.so: undefined reference to `roundf’
libQtWebKit.so: undefined reference to `lround’

这些函数是定义在Linux下的数学库里的,也就是libm.so或者libm.a。但是有些toolchina在做基本库的时候,并没有把这些函数包括进去,你在Linux Shell命令行下,可以用
$ nm libm.so | grep trunc
或者
$ strings libm.so |grep trunc
查看是否定义了对应的函数。

最直观的解决方法就是重新编译一个带有trunc/roundf这些函数的数学库。也可以造福其它引用libm库的应用或应用框架。

如果你只是编译Qt的话,还有一个解决方法,就是自己去实现这些函数。因为Windows版的数学库就是不带这些函数的,所以Qt的代码里已经自带了这些函数的实现代码。我以QtEmbedded-4.5.2为例,看代码
src/3rdparty/webkit/JavaScriptCore/wtf/MathExtras.h

105 #if COMPILER(MSVC) || COMPILER(RVCT)
106
107 inline long lround(double num) { return static_cast<long>(num > 0 ? num + 0.5 : ceil(num - 0.5)); }
108 inline long lroundf(float num) { return static_cast<long>(num > 0 ? num + 0.5f : ceilf(num - 0.5f)); }
109 inline double round(double num) { return num > 0 ? floor(num + 0.5) : ceil(num - 0.5); }
110 inline float roundf(float num) { return num > 0 ? floorf(num + 0.5f) : ceilf(num - 0.5f); }
111 inline double trunc(double num) { return num > 0 ? floor(num) : ceil(num); }
112
113 #endif
上面看到的这段代码只在MSVC的情况下可以编译,我们自然可以自己的宏去控制它是否编译了,这个宏可以在qmake.conf里的QMAKE_CXXFLAGS或者QMAKE_CFLAGS环境变量中添加
+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

4.直接使用新的webkit库时遇到问题:
swapp: can't resolve symbol '_ZN9QHashData14detach_helper2EPFvPNS_4NodeEPvEPFvS1_Eii' in lib '/mnt/lib/libQtWebKit.so.4'
显然webkit的新版本没有将原有修改合并进来

这篇关于基于mipsel编译Qt4.6.2版本的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/850669

相关文章

Ubuntu如何升级Python版本

《Ubuntu如何升级Python版本》Ubuntu22.04Docker中,安装Python3.11后,使用update-alternatives设置为默认版本,最后用python3-V验证... 目China编程录问题描述前提环境解决方法总结问题描述Ubuntu22.04系统自带python3.10,想升级

更改linux系统的默认Python版本方式

《更改linux系统的默认Python版本方式》通过删除原Python软链接并创建指向python3.6的新链接,可切换系统默认Python版本,需注意版本冲突、环境混乱及维护问题,建议使用pyenv... 目录更改系统的默认python版本软链接软链接的特点创建软链接的命令使用场景注意事项总结更改系统的默

Linux升级或者切换python版本实现方式

《Linux升级或者切换python版本实现方式》本文介绍在Ubuntu/Debian系统升级Python至3.11或更高版本的方法,通过查看版本列表并选择新版本进行全局修改,需注意自动与手动模式的选... 目录升级系统python版本 (适用于全局修改)对于Ubuntu/Debian系统安装后,验证Pyt

MySQL 升级到8.4版本的完整流程及操作方法

《MySQL升级到8.4版本的完整流程及操作方法》本文详细说明了MySQL升级至8.4的完整流程,涵盖升级前准备(备份、兼容性检查)、支持路径(原地、逻辑导出、复制)、关键变更(空间索引、保留关键字... 目录一、升级前准备 (3.1 Before You Begin)二、升级路径 (3.2 Upgrade

Nginx进行平滑升级的实战指南(不中断服务版本更新)

《Nginx进行平滑升级的实战指南(不中断服务版本更新)》Nginx的平滑升级(也称为热升级)是一种在不停止服务的情况下更新Nginx版本或添加模块的方法,这种升级方式确保了服务的高可用性,避免了因升... 目录一.下载并编译新版Nginx1.下载解压2.编译二.替换可执行文件,并平滑升级1.替换可执行文件

在macOS上安装jenv管理JDK版本的详细步骤

《在macOS上安装jenv管理JDK版本的详细步骤》jEnv是一个命令行工具,正如它的官网所宣称的那样,它是来让你忘记怎么配置JAVA_HOME环境变量的神队友,:本文主要介绍在macOS上安装... 目录前言安装 jenv添加 JDK 版本到 jenv切换 JDK 版本总结前言China编程在开发 Java

Go语言编译环境设置教程

《Go语言编译环境设置教程》Go语言支持高并发(goroutine)、自动垃圾回收,编译为跨平台二进制文件,云原生兼容且社区活跃,开发便捷,内置测试与vet工具辅助检测错误,依赖模块化管理,提升开发效... 目录Go语言优势下载 Go  配置编译环境配置 GOPROXYIDE 设置(VS Code)一些基本

java使用protobuf-maven-plugin的插件编译proto文件详解

《java使用protobuf-maven-plugin的插件编译proto文件详解》:本文主要介绍java使用protobuf-maven-plugin的插件编译proto文件,具有很好的参考价... 目录protobuf文件作为数据传输和存储的协议主要介绍在Java使用maven编译proto文件的插件

Visual Studio 2022 编译C++20代码的图文步骤

《VisualStudio2022编译C++20代码的图文步骤》在VisualStudio中启用C++20import功能,需设置语言标准为ISOC++20,开启扫描源查找模块依赖及实验性标... 默认创建Visual Studio桌面控制台项目代码包含C++20的import方法。右键项目的属性:

使用jenv工具管理多个JDK版本的方法步骤

《使用jenv工具管理多个JDK版本的方法步骤》jenv是一个开源的Java环境管理工具,旨在帮助开发者在同一台机器上轻松管理和切换多个Java版本,:本文主要介绍使用jenv工具管理多个JD... 目录一、jenv到底是干啥的?二、jenv的核心功能(一)管理多个Java版本(二)支持插件扩展(三)环境隔