Windows編譯OpenCV4Android解決undefined reference to std錯誤

来源:https://www.cnblogs.com/qq2523984508/archive/2018/11/05/9912221.html
-Advertisement-
Play Games

OpenCV4Android支持三種使用方式1.Java層調用2.NDK調用動態庫(方便,但是會包含整個.so庫)3.NDK調用靜態庫(靈活,比如沒有用到機器學習模塊,libopencv_ml.a里的代碼是不會打包到動態庫里的)通過鏈接靜態庫的方式使用OpenCV4Android,CMAKE配置如下 ...


OpenCV4Android支持三種使用方式
1.Java層調用
2.NDK調用動態庫(方便,但是會包含整個.so庫)
3.NDK調用靜態庫(靈活,比如沒有用到機器學習模塊,libopencv_ml.a里的代碼是不會打包到動態庫里的)
通過鏈接靜態庫的方式使用OpenCV4Android,CMAKE配置如下

#############################prepare for using of opencv static library####################
#first step to use opencv
set(OpenCV_STATIC ON)
#second step to use opencv
set(OpenCV_DIR C:/sdk/opencv-3.4.2-android-sdk/sdk/native/jni)
#third step to use opencv
find_package(OpenCV REQUIRED)
###########################################################################################
##################################################the native-lib shared library############
# Creates and names a library, sets it as either STATIC
# or SHARED, and provides the relative paths to its source code.
# You can define multiple libraries, and CMake builds them for you.
# Gradle automatically packages shared libraries with your APK.

add_library( # Sets the name of the library.
        native-lib

        # Sets the library as a shared library.
        SHARED

        # Provides a relative path to your source file(s).
        src/main/cpp/native-lib.cpp)

# Searches for a specified prebuilt library and stores the path as a
# variable. Because CMake includes system libraries in the search path by
# default, you only need to specify the name of the public NDK library
# you want to add. CMake verifies that the library exists before
# completing its build.

find_library( # Sets the name of the path variable.
        log-lib

        # Specifies the name of the NDK library that
        # you want CMake to locate.
        log)

# Specifies libraries CMake should link to your target library. You
# can link multiple libraries, such as libraries you define in this
# build script, prebuilt third-party libraries, or system libraries.
target_link_libraries( # Specifies the target library.
        native-lib

        #foutth step to use opencv link opencv
        ${OpenCV_LIBS}
        # Links the target library to the log library
        # included in the NDK.
        ${log-lib})
######################################################################################

僅僅是新建項目稍稍修改了native-lib.cpp的代碼,在函數里用了下opencv的函數

#include <jni.h>
#include <string>
#include "opencv2/core/core.hpp"
#include "opencv2/imgproc/imgproc_c.h"

extern "C" JNIEXPORT jstring JNICALL
Java_com_example_useprebuiltstaticlibrary_MainActivity_stringFromJNI(
        JNIEnv *env,
        jobject /* this */) {
    std::string hello="hello";
    cv::Mat m=cv::Mat::eye(3,3,CV_8UC1);
    return env->NewStringUTF(hello.c_str());
}

編譯時卻報錯

Build command failed.
Error while executing process C:\sdk\cmake\3.6.4111459\bin\cmake.exe with arguments {--build C:\sdk\demo\usePrebuiltStaticLibrary\app\.externalNativeBuild\cmake\debug\armeabi-v7a --target native-lib}
[1/2] Building CXX object CMakeFiles/native-lib.dir/src/main/cpp/native-lib.cpp.o
[2/2] Linking CXX shared library ..\..\..\..\build\intermediates\cmake\debug\obj\armeabi-v7a\libnative-lib.so
FAILED: cmd.exe /C "cd . && C:\sdk\ndk-bundle\toolchains\llvm\prebuilt\windows-x86_64\bin\clang++.exe  --target=armv7-none-linux-androideabi23 --gcc-toolchain=C:/sdk/ndk-bundle/toolchains/arm-linux-androideabi-4.9/prebuilt/windows-x86_64 --sysroot=C:/sdk/ndk-bundle/sysroot -fPIC -isystem C:/sdk/ndk-bundle/sysroot/usr/include/arm-linux-androideabi -g -DANDROID -ffunction-sections -funwind-tables -fstack-protector-strong -no-canonical-prefixes -march=armv7-a -mfloat-abi=softfp -mfpu=vfpv3-d16 -mthumb -mfpu=neon -Wa,--noexecstack -Wformat -Werror=format-security -std=c++11 -std=c++11 -O0 -fno-limit-debug-info  -Wl,--exclude-libs,libgcc.a -Wl,--exclude-libs,libatomic.a -nostdlib++ --sysroot C:/sdk/ndk-bundle/platforms/android-23/arch-arm -Wl,--build-id -Wl,--warn-shared-textrel -Wl,--fatal-warnings -Wl,--fix-cortex-a8 -Wl,--exclude-libs,libunwind.a -LC:/sdk/ndk-bundle/sources/cxx-stl/llvm-libc++/libs/armeabi-v7a -Wl,--no-undefined -Wl,-z,noexecstack -Qunused-arguments -Wl,-z,relro -Wl,-z,now -shared -Wl,-soname,libnative-lib.so -o ..\..\..\..\build\intermediates\cmake\debug\obj\armeabi-v7a\libnative-lib.so CMakeFiles/native-lib.dir/src/main/cpp/native-lib.cpp.o  C:/sdk/opencv-3.4.2-android-sdk/sdk/native/staticlibs/armeabi-v7a/libopencv_highgui.a C:/sdk/opencv-3.4.2-android-sdk/sdk/native/staticlibs/armeabi-v7a/libopencv_features2d.a C:/sdk/opencv-3.4.2-android-sdk/sdk/native/staticlibs/armeabi-v7a/libopencv_shape.a C:/sdk/opencv-3.4.2-android-sdk/sdk/native/staticlibs/armeabi-v7a/libopencv_imgcodecs.a C:/sdk/opencv-3.4.2-android-sdk/sdk/native/staticlibs/armeabi-v7a/libopencv_ml.a C:/sdk/opencv-3.4.2-android-sdk/sdk/native/staticlibs/armeabi-v7a/libopencv_videoio.a C:/sdk/opencv-3.4.2-android-sdk/sdk/native/staticlibs/armeabi-v7a/libopencv_dnn.a C:/sdk/opencv-3.4.2-android-sdk/sdk/native/staticlibs/armeabi-v7a/libopencv_flann.a C:/sdk/opencv-3.4.2-android-sdk/sdk/native/staticlibs/armeabi-v7a/libopencv_objdetect.a C:/sdk/opencv-3.4.2-android-sdk/sdk/native/staticlibs/armeabi-v7a/libopencv_core.a C:/sdk/opencv-3.4.2-android-sdk/sdk/native/staticlibs/armeabi-v7a/libopencv_calib3d.a C:/sdk/opencv-3.4.2-android-sdk/sdk/native/staticlibs/armeabi-v7a/libopencv_video.a C:/sdk/opencv-3.4.2-android-sdk/sdk/native/staticlibs/armeabi-v7a/libopencv_superres.a C:/sdk/opencv-3.4.2-android-sdk/sdk/native/staticlibs/armeabi-v7a/libopencv_photo.a C:/sdk/opencv-3.4.2-android-sdk/sdk/native/staticlibs/armeabi-v7a/libopencv_imgproc.a C:/sdk/opencv-3.4.2-android-sdk/sdk/native/staticlibs/armeabi-v7a/libopencv_stitching.a C:/sdk/opencv-3.4.2-android-sdk/sdk/native/staticlibs/armeabi-v7a/libopencv_videostab.a -llog C:/sdk/opencv-3.4.2-android-sdk/sdk/native/3rdparty/libs/armeabi-v7a/liblibprotobuf.a C:/sdk/opencv-3.4.2-android-sdk/sdk/native/staticlibs/armeabi-v7a/libopencv_calib3d.a C:/sdk/opencv-3.4.2-android-sdk/sdk/native/staticlibs/armeabi-v7a/libopencv_features2d.a C:/sdk/opencv-3.4.2-android-sdk/sdk/native/staticlibs/armeabi-v7a/libopencv_highgui.a C:/sdk/opencv-3.4.2-android-sdk/sdk/native/staticlibs/armeabi-v7a/libopencv_videoio.a C:/sdk/opencv-3.4.2-android-sdk/sdk/native/staticlibs/armeabi-v7a/libopencv_imgcodecs.a C:/sdk/opencv-3.4.2-android-sdk/sdk/native/3rdparty/libs/armeabi-v7a/liblibjpeg-turbo.a C:/sdk/opencv-3.4.2-android-sdk/sdk/native/3rdparty/libs/armeabi-v7a/liblibwebp.a C:/sdk/opencv-3.4.2-android-sdk/sdk/native/3rdparty/libs/armeabi-v7a/liblibpng.a C:/sdk/opencv-3.4.2-android-sdk/sdk/native/3rdparty/libs/armeabi-v7a/liblibtiff.a C:/sdk/opencv-3.4.2-android-sdk/sdk/native/3rdparty/libs/armeabi-v7a/liblibjasper.a C:/sdk/opencv-3.4.2-android-sdk/sdk/native/3rdparty/libs/armeabi-v7a/libIlmImf.a C:/sdk/opencv-3.4.2-android-sdk/sdk/native/staticlibs/armeabi-v7a/libopencv_flann.a C:/sdk/opencv-3.4.2-android-sdk/sdk/native/staticlibs/armeabi-v7a/libopencv_video.a C:/sdk/opencv-3.4.2-android-sdk/sdk/native/staticlibs/armeabi-v7a/libopencv_photo.a C:/sdk/opencv-3.4.2-android-sdk/sdk/native/staticlibs/armeabi-v7a/libopencv_imgproc.a C:/sdk/opencv-3.4.2-android-sdk/sdk/native/staticlibs/armeabi-v7a/libopencv_core.a -lz C:/sdk/opencv-3.4.2-android-sdk/sdk/native/3rdparty/libs/armeabi-v7a/libtbb.a -lc C:/sdk/opencv-3.4.2-android-sdk/sdk/native/3rdparty/libs/armeabi-v7a/libcpufeatures.a -ldl -lm -llog C:/sdk/opencv-3.4.2-android-sdk/sdk/native/3rdparty/libs/armeabi-v7a/libtegra_hal.a -latomic -lm "C:/sdk/ndk-bundle/sources/cxx-stl/llvm-libc++/libs/armeabi-v7a/libc++_static.a" "C:/sdk/ndk-bundle/sources/cxx-stl/llvm-libc++/libs/armeabi-v7a/libc++abi.a" "C:/sdk/ndk-bundle/sources/cxx-stl/llvm-libc++/libs/armeabi-v7a/libunwind.a" "-ldl" && cd ."
C:/sdk/opencv-3.4.2-android-sdk/sdk/native/staticlibs/armeabi-v7a/libopencv_core.a(system.cpp.o):system.cpp:function std::basic_ostream<char, std::char_traits<char> >& std::operator<< <std::char_traits<char> >(std::basic_ostream<char, std::char_traits<char> >&, char const*) [clone .part.13]: error: undefined reference to 'std::basic_ios<char, std::char_traits<char> >::clear(std::_Ios_Iostate)'
C:/sdk/opencv-3.4.2-android-sdk/sdk/native/staticlibs/armeabi-v7a/libopencv_core.a(system.cpp.o):system.cpp:function cv::Exception::formatMessage(): error: undefined reference to 'std::basic_stringstream<char, std::char_traits<char>, std::allocator<char> >::basic_stringstream(std::_Ios_Openmode)'
C:/sdk/opencv-3.4.2-android-sdk/sdk/native/staticlibs/armeabi-v7a/libopencv_core.a(system.cpp.o):system.cpp:function cv::Exception::formatMessage(): error: undefined reference to 'std::basic_ostream<char, std::char_traits<char> >& std::__ostream_insert<char, std::char_traits<char> >(std::basic_ostream<char, std::char_traits<char> >&, char const*, int)'
C:/sdk/opencv-3.4.2-android-sdk/sdk/native/staticlibs/armeabi-v7a/libopencv_core.a(system.cpp.o):system.cpp:function cv::Exception::formatMessage(): error: undefined reference to 'std::basic_ostream<char, std::char_traits<char> >& std::__ostream_insert<char, std::char_traits<char> >(std::basic_ostream<char, std::char_traits<char> >&, char const*, int)'
C:/sdk/opencv-3.4.2-android-sdk/sdk/native/staticlibs/armeabi-v7a/libopencv_core.a(system.cpp.o):system.cpp:function cv::Exception::formatMessage(): error: undefined reference to 'std::ostream::put(char)'
C:/sdk/opencv-3.4.2-android-sdk/sdk/native/staticlibs/armeabi-v7a/libopencv_core.a(system.cpp.o):system.cpp:function cv::Exception::formatMessage(): error: undefined reference to 'std::ostream::flush()'
C:/sdk/opencv-3.4.2-android-sdk/sdk/native/staticlibs/armeabi-v7a/libopencv_core.a(system.cpp.o):system.cpp:function cv::Exception::formatMessage(): error: undefined reference to 'std::basic_ostream<char, std::char_traits<char> >& std::__ostream_insert<char, std::char_traits<char> >(std::basic_ostream<char, std::char_traits<char> >&, char const*, int)'
C:/sdk/opencv-3.4.2-android-sdk/sdk/native/staticlibs/armeabi-v7a/libopencv_core.a(system.cpp.o):system.cpp:function cv::Exception::formatMessage(): error: undefined reference to 'std::basic_ostream<char, std::char_traits<char> >& std::__ostream_insert<char, std::char_traits<char> >(std::basic_ostream<char, std::char_traits<char> >&, char const*, int)'
C:/sdk/opencv-3.4.2-android-sdk/sdk/native/staticlibs/armeabi-v7a/libopencv_core.a(system.cpp.o):system.cpp:function cv::Exception::formatMessage(): error: undefined reference to 'std::ostream::put(char)'
.
.
.
.
.
.
.
.
.
C:/sdk/opencv-3.4.2-android-sdk/sdk/native/staticlibs/armeabi-v7a/libopencv_core.a(persistence_json.cpp.o):persistence_json.cpp:function icvJSONParseValue(CvFileStorage*, char*, CvFileNode*): error: undefined reference to 'std::string::at(unsigned int)' C:/sdk/opencv-3.4.2-android-sdk/sdk/native/staticlibs/armeabi-v7a/libopencv_core.a(persistence.cpp.o):persistence.cpp:function check_if_write_struct_is_delayed(CvFileStorage*, bool): error: undefined reference to 'std::string::assign(char const*, unsigned int)' clang++.exe: error: linker command failed with exit code 1 (use -v to see invocation) ninja: build stopped: subcommand failed.

google得知是因為編譯這些靜態庫時所用的編譯器、標準庫等跟NDK當前的版本不同。網上的建議都是stl改為gnustl_static或gnustl_shared之類。可較新的NDK都不支持這些stl了,為了使用OpenCV靜態庫只能重新編譯了。
編譯OpenCV4Android的過程里爬了不少坑,總結一下,希望有助於小白們。

1. 安裝MinGW
這裡不詳細的說了,網上很多教程。選擇如圖三項安裝

安裝好後差不多二三百兆,在環境變數Path里添加
C:\MinGW\bin
C:\MinGW\msys\1.0\bin
這裡C:\MinGW是我的安裝目錄。配置好後需要註銷電腦,再登陸。在命令行里gcc -v看到能輸出版本就算差不多設置好環境了。

2. CMAKE 配置
下載好源代碼解壓,我放在C:\opencv-3.4.2。打開CMAKE圖形界面

如圖一定要選擇MinGW Makefiles,我想這也是為什麼一定要先安裝配置MinGW的原因。選擇指定工具鏈,點擊next

這裡一定要註意,選擇的不是源代碼
\opencv-3.4.2\platforms\android\android.toolchain.cmake
這個工具鏈,這個工具鏈過時了。新版本的NDK帶有自己的工具鏈,這裡選擇NDK
/build/cmake/android.toolchain.cmake這個工具鏈。
這裡感謝
https://github.com/opencv/opencv/issues/8742
點擊Finish。有錯誤別管,點擊configure。開始配置。出現錯誤就再點configure直到遇到一個跳不過去的錯誤,看看是不是讓你配置SDK路徑

Android SDK: specify path to Android SDK via ANDROID_SDK_ROOT /
  ANDROID_HOME / ANDROID_SDK variables

點擊Add Entry添加變數

 註意類型是FilePath。點擊OK。點擊configure。很快又跳出一個錯誤

CMake Error at cmake/android/android_gradle_projects.cmake:1 (message):
  

  Android gradle-based build/projects are not supported in this version of
  OpenCV.

  You need to downgrade Android SDK Tools to version 25.2.5.

  Details: https://github.com/opencv/opencv/issues/8460

Call Stack (most recent call first):
  cmake/android/OpenCVDetectAndroidSDK.cmake:204 (include)
  CMakeLists.txt:645 (include)

這是SDK比較新,新的SDK只支持Gradle編譯,而OpenCV需要Ant編譯。這裡也給出瞭解決方法
Details: https://github.com/opencv/opencv/issues/8460
就是下載一個較舊的SDK。正如連接所說,windows選擇這個
https://dl.google.com/android/repository/tools_r25.2.5-windows.zip
解壓後發現裡面只有一個tool目錄,而SDK里也有一個tool目錄。我的做法是先重命名SDK里的tool為tool28。再將下載的tool複製進SDK。
點擊configure。(這裡可能還是這個錯誤,這樣就需要刪除C:\opencv-3.4.2\build里所有內容,重啟CMAKE。再來一次。所以這一步最好在CMAKE前就做好。
接下來會遇到這個錯誤

CMake Error at cmake/android/OpenCVDetectAndroidSDK.cmake:184 (message):
  Android SDK: Can't build Android projects as requested by
  BUILD_ANDROID_PROJECTS=ON variable.

  Use BUILD_ANDROID_PROJECTS=OFF to prepare Android project files without
  building them
Call Stack (most recent call first):
  CMakeLists.txt:645 (include)

如圖搜索這個變數,取消選擇。點擊configure。
配置成功。

如圖搜做tbb選擇兩項,否則不生成libtbb.a庫,我不知這又什麼用,但是預編譯的SDK里有這個。
還有其它的一些變數可以配置,比如添加ANDROID_ABI,否則僅僅生成armeabi-v7a。修改變數、添加變數後記得configure。
配置完成點擊generate,生成完成。CMAKE可關閉了。

3.編譯
命令行進入C:\opencv-3.4.2\build目錄,這裡有很多配置好的文件,輸入mingw32-make,就開始編譯。等好久就成功了。

C:\opencv-3.4.2\build>mingw32-make
Scanning dependencies of target gen-pkgconfig
[  0%] Generate opencv.pc
[  0%] Built target gen-pkgconfig
Scanning dependencies of target libcpufeatures
[  0%] Building C object 3rdparty/cpufeatures/CMakeFiles/libcpufeatures.dir/cpu-features.c.o
[  0%] Linking C static library ..\lib\armeabi-v7a\libcpufeatures.a
[  0%] Built target libcpufeatures
Scanning dependencies of target libjpeg-turbo
[  0%] Building C object 3rdparty/libjpeg-turbo/CMakeFiles/libjpeg-turbo.dir/src/jcapimin.c.o
[  1%] Building C object 3rdparty/libjpeg-turbo/CMakeFiles/libjpeg-turbo.dir/src/jcapistd.c.o
[  1%] Building C object 3rdparty/libjpeg-turbo/CMakeFiles/libjpeg-turbo.dir/src/jccoefct.c.o
[  1%] Building C object 3rdparty/libjpeg-turbo/CMakeFiles/libjpeg-turbo.dir/src/jccolor.c.o
[  1%] Building C object 3rdparty/libjpeg-turbo/CMakeFiles/libjpeg-turbo.dir/src/jcdctmgr.c.o
[  1%] Building C object 3rdparty/libjpeg-turbo/CMakeFiles/libjpeg-turbo.dir/src/jchuff.c.o
[  1%] Building C object 3rdparty/libjpeg-turbo/CMakeFiles/libjpeg-turbo.dir/src/jcinit.c.o
[  1%] Building C object 3rdparty/libjpeg-turbo/CMakeFiles/libjpeg-turbo.dir/src/jcmainct.c.o
[  1%] Building C object 3rdparty/libjpeg-turbo/CMakeFiles/libjpeg-turbo.dir/src/jcmarker.c.o
[  1%] Building C object 3rdparty/libjpeg-turbo/CMakeFiles/libjpeg-turbo.dir/src/jcmaster.c.o
.
.
.
.
.
.
.
.
.
[ 99%] Linking CXX executable ..\..\bin\opencv_perf_stitching
[ 99%] Built target opencv_perf_stitching
Scanning dependencies of target opencv_videostab
[100%] Building CXX object modules/videostab/CMakeFiles/opencv_videostab.dir/src/deblurring.cpp.o
[100%] Building CXX object modules/videostab/CMakeFiles/opencv_videostab.dir/src/fast_marching.cpp.o
[100%] Building CXX object modules/videostab/CMakeFiles/opencv_videostab.dir/src/frame_source.cpp.o
[100%] Building CXX object modules/videostab/CMakeFiles/opencv_videostab.dir/src/global_motion.cpp.o
[100%] Building CXX object modules/videostab/CMakeFiles/opencv_videostab.dir/src/inpainting.cpp.o
[100%] Building CXX object modules/videostab/CMakeFiles/opencv_videostab.dir/src/log.cpp.o
[100%] Building CXX object modules/videostab/CMakeFiles/opencv_videostab.dir/src/motion_stabilizing.cpp.o
[100%] Building CXX object modules/videostab/CMakeFiles/opencv_videostab.dir/src/optical_flow.cpp.o
[100%] Building CXX object modules/videostab/CMakeFiles/opencv_videostab.dir/src/outlier_rejection.cpp.o
[100%] Building CXX object modules/videostab/CMakeFiles/opencv_videostab.dir/src/stabilizer.cpp.o
[100%] Building CXX object modules/videostab/CMakeFiles/opencv_videostab.dir/src/wobble_suppression.cpp.o
[100%] Linking CXX static library ..\..\lib\armeabi-v7a\libopencv_videostab.a
[100%] Built target opencv_videostab
Scanning dependencies of target opencv_test_videostab
[100%] Building CXX object modules/videostab/CMakeFiles/opencv_test_videostab.dir/test/test_main.cpp.o
[100%] Building CXX object modules/videostab/CMakeFiles/opencv_test_videostab.dir/test/test_motion_estimation.cpp.o
[100%] Linking CXX executable ..\..\bin\opencv_test_videostab
[100%] Built target opencv_test_videostab

4.配置庫
生成的庫在
\opencv-3.4.2\build\lib
第三方庫在
\opencv-3.4.2\build\3rdparty\lib
將其複製到
\opencv-3.4.2-android-sdk
相應目錄下替換掉原來的

現在編譯項目則沒有鏈接錯誤了。

參考文章:
1.https://github.com/opencv/opencv/issues/8742
2.https://github.com/opencv/opencv/issues/8460
3.https://blog.csdn.net/xiao19950820/article/details/77119891


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 結構清晰、完整,內容實用。沒有過多的理論介紹,每個知識點都配有相關的例子,可操作性強,非常適合初學者循序漸進的學習。需要學習的朋友可以通過網盤免費下載pdf版 (先點擊普通下載 再選擇普通用戶就能免費下載了)http://putpan.com/fs/byibdens6hu823072/ 《MySQL ...
  • 一、‘xp_cmdshell’的啟用 SQL Server阻止了對組件‘xp_cmdshell’的過程‘sys.xp_cmdshell’的訪問。因為此組件已作為此服務囂安全配置的一部分而被關 閉。系統管理員可以通過使用sp_configure啟用‘xp_cmdshell’。有關啟用‘xp_cmdsh ...
  • (以項目中實際使用的GNSS庫為例) 背景:數據量巨大,定時創建月表存放數據,月表中數據存放在不同的文件組中來提高查詢效率 一、創建資料庫,添加文件組 除了邏輯文件和物理文件的分離之外,SQL Server使用文件組還有一個優勢,那就是分散IO負載,其實現的原理是: 對於單分區表,數據只能存到一個文 ...
  • 作者:天山老妖S 鏈接:http://blog.51cto.com/9291927 一、視圖簡介 1、視圖簡介 視圖是由SELECT查詢語句所定義的一個虛擬表,是查看數據的一種非常有效的方式。視圖包含一系列有名稱的數據列和數據行,但視圖中的數據並不真實在於資料庫中,視圖返回的是結果集。 2、創建視圖 ...
  • 很多初學者在萌生向大數據方向發展的想法之後,不免產生一些疑問,應該怎樣入門?應該學習哪些技術?學習路線又是什麼?所有萌生入行的想法與想要學習Java的同學的初衷是一樣的。崗位非常火,就業薪資比較高,,前景非常可觀。基本都是這個原因而嚮往大數據,但是對大數據卻不甚瞭解。 如果你想學習,那麼首先你需要學 ...
  • [20181105]再論12c set feedback only.txt--//前一陣子的測試,鏈接:http://blog.itpub.net/267265/viewspace-2216290/--//12CR2 ,增強了set FEEDBACK功能,加入only選項可以禁止輸出信息顯示,僅僅顯 ...
  • HQL查詢語法 聚合查詢:count,sum ,svg,max,min 投影查詢 Criteria查詢語法:和HQL一樣的也是面向對象的ORM查詢 離線Criteria 查詢優化 ...
  • root 密碼忘記了。 解決思路:目前是進入不了資料庫的情況,所以我們要考慮是不是可以跳過許可權。因為在資料庫中,MySQL 資料庫中 user 表記錄著我們用戶的信息。 解決方法:啟動 MySQL 資料庫的過程中,可以這樣執行: 這樣啟動,就可以不用輸入密碼,直接進入 MySQL 資料庫了。然後在修 ...
一周排行
    -Advertisement-
    Play Games
  • 示例項目結構 在 Visual Studio 中創建一個 WinForms 應用程式後,項目結構如下所示: MyWinFormsApp/ │ ├───Properties/ │ └───Settings.settings │ ├───bin/ │ ├───Debug/ │ └───Release/ ...
  • [STAThread] 特性用於需要與 COM 組件交互的應用程式,尤其是依賴單線程模型(如 Windows Forms 應用程式)的組件。在 STA 模式下,線程擁有自己的消息迴圈,這對於處理用戶界面和某些 COM 組件是必要的。 [STAThread] static void Main(stri ...
  • 在WinForm中使用全局異常捕獲處理 在WinForm應用程式中,全局異常捕獲是確保程式穩定性的關鍵。通過在Program類的Main方法中設置全局異常處理,可以有效地捕獲並處理未預見的異常,從而避免程式崩潰。 註冊全局異常事件 [STAThread] static void Main() { / ...
  • 前言 給大家推薦一款開源的 Winform 控制項庫,可以幫助我們開發更加美觀、漂亮的 WinForm 界面。 項目介紹 SunnyUI.NET 是一個基於 .NET Framework 4.0+、.NET 6、.NET 7 和 .NET 8 的 WinForm 開源控制項庫,同時也提供了工具類庫、擴展 ...
  • 說明 該文章是屬於OverallAuth2.0系列文章,每周更新一篇該系列文章(從0到1完成系統開發)。 該系統文章,我會儘量說的非常詳細,做到不管新手、老手都能看懂。 說明:OverallAuth2.0 是一個簡單、易懂、功能強大的許可權+可視化流程管理系統。 有興趣的朋友,請關註我吧(*^▽^*) ...
  • 一、下載安裝 1.下載git 必須先下載並安裝git,再TortoiseGit下載安裝 git安裝參考教程:https://blog.csdn.net/mukes/article/details/115693833 2.TortoiseGit下載與安裝 TortoiseGit,Git客戶端,32/6 ...
  • 前言 在項目開發過程中,理解數據結構和演算法如同掌握蓋房子的秘訣。演算法不僅能幫助我們編寫高效、優質的代碼,還能解決項目中遇到的各種難題。 給大家推薦一個支持C#的開源免費、新手友好的數據結構與演算法入門教程:Hello演算法。 項目介紹 《Hello Algo》是一本開源免費、新手友好的數據結構與演算法入門 ...
  • 1.生成單個Proto.bat內容 @rem Copyright 2016, Google Inc. @rem All rights reserved. @rem @rem Redistribution and use in source and binary forms, with or with ...
  • 一:背景 1. 講故事 前段時間有位朋友找到我,說他的窗體程式在客戶這邊出現了卡死,讓我幫忙看下怎麼回事?dump也生成了,既然有dump了那就上 windbg 分析吧。 二:WinDbg 分析 1. 為什麼會卡死 窗體程式的卡死,入口門檻很低,後續往下分析就不一定了,不管怎麼說先用 !clrsta ...
  • 前言 人工智慧時代,人臉識別技術已成為安全驗證、身份識別和用戶交互的關鍵工具。 給大家推薦一款.NET 開源提供了強大的人臉識別 API,工具不僅易於集成,還具備高效處理能力。 本文將介紹一款如何利用這些API,為我們的項目添加智能識別的亮點。 項目介紹 GitHub 上擁有 1.2k 星標的 C# ...