openssl3.2 - 編譯 - zlib.dll不要使用絕對路徑

文章目錄

    • openssl3.2 - 編譯 - 編譯時的動態庫zlib.dll不要使用絕對路徑
    • 概述
    • 測試zlib特性在安裝好的目錄中是否正常
    • 筆記
    • 70-test_tls13certcomp.t
    • 80-test_cms.t
    • 對測試環境的猜測
    • 從頭再編譯測試安裝一次
    • 測試一下隨便改變位置的openssl用到zlib時是否好使
    • 測試一下隨便改變位置的openssl未找到zlib.dll時是否報錯
    • 總結
    • END

openssl3.2 - 編譯 - 編譯時的動態庫zlib.dll不要使用絕對路徑

概述

前面編譯了openssl3.2(openssl3.2 - 編譯), 編譯命令行中使用加ZLIB特性時, 使用了絕對路徑, 如下:

打開vs2019x64本地命令行, 選擇管理員身份運行
set path=c:\nasm;%path%
cd /d D:\3rd_prj\crypt\openssl-3.2.0
perl Configure VC-WIN64A --debug zlib-dynamic --with-zlib-include=c:\zlib_1d3 --with-zlib-lib=c:\zlib_1d3\my_zlib_1d3.dll --prefix=c:\openssl_3d2 --openssldir=c:\openssl_3d2\common
nmake
nmake test
nmake install

如果在本機做實驗沒問題.
前幾天, 為了歸檔方便, 將openssl安裝好的路徑移動到歸檔目錄中.
在這里插入圖片描述
再運行openssl和zlib相關的功能, 就有報錯提示, 說找不到 c:\zlib_1d3\my_zlib_1d3.dll
這樣就沒法在其他計算機上用啊.
嘗試將在openssl編譯時用的zlib.dll指定為相對路徑 e.g. .\my_zlib_1d3.dll
將my_zlib_1d3.dll拷貝到openssl源碼目錄.\下
再編譯(config , nmake), 然后在nmake test時, 報錯如下:

07-test_bio_comp.t                    (Wstat: 256 Tests: 1 Failed: 1)Failed test:  1Non-zero exit status: 1
70-test_tls13certcomp.t               (Wstat: 5632 Tests: 1 Failed: 0)Non-zero exit status: 22Parse errors: Bad plan.  You planned 8 tests but ran 1.
75-test_quicapi.t                     (Wstat: 256 Tests: 1 Failed: 1)Failed test:  1Non-zero exit status: 1
80-test_cms.t                         (Wstat: 256 Tests: 22 Failed: 1)Failed test:  5Non-zero exit status: 1
80-test_ssl_new.t                     (Wstat: 1280 Tests: 31 Failed: 5)Failed tests:  4, 20, 22, 26, 31Non-zero exit status: 5
80-test_ssl_old.t                     (Wstat: 512 Tests: 7 Failed: 2)Failed tests:  2-3Non-zero exit status: 2
90-test_cert_comp.t                   (Wstat: 256 Tests: 1 Failed: 1)Failed test:  1Non-zero exit status: 1
90-test_rpk.t                         (Wstat: 256 Tests: 1 Failed: 1)Failed test:  1Non-zero exit status: 1
90-test_shlibload.t                   (Wstat: 1024 Tests: 10 Failed: 4)Failed tests:  1-4Non-zero exit status: 4
90-test_sslapi.t                      (Wstat: 256 Tests: 4 Failed: 1)Failed test:  1Non-zero exit status: 1
Files=294, Tests=3411, 1091 wallclock secs ( 5.14 usr +  1.11 sys =  6.25 CPU)
Result: FAIL
NMAKE : fatal error U1077: “cmd”: 返回代碼“0x1”
Stop.
NMAKE : fatal error U1077: “"C:\Program Files (x86)\Microsoft Visual Studio\2019\Enterprise\VC\Tools\MSVC\14.29.30133\bin\HostX64\x64\nmake.exe"”: 返回代碼“0x2”
Stop.

看了bio_comp_test.c, 有和zlib相關的函數調用.
再將my_zlib_1d3.dll拷貝到bio_comp_test.exe所在的.\test目錄下, 再運行nmake test, 還是有報錯, 如下:

70-test_tls13certcomp.t               (Wstat: 5632 Tests: 1 Failed: 0)Non-zero exit status: 22Parse errors: Bad plan.  You planned 8 tests but ran 1.
80-test_cms.t                         (Wstat: 256 Tests: 22 Failed: 1)Failed test:  5Non-zero exit status: 1
Files=294, Tests=3411, 1069 wallclock secs ( 5.56 usr +  1.08 sys =  6.64 CPU)
Result: FAIL
NMAKE : fatal error U1077: “cmd”: 返回代碼“0x1”
Stop.
NMAKE : fatal error U1077: “"C:\Program Files (x86)\Microsoft Visual Studio\2019\Enterprise\VC\Tools\MSVC\14.29.30133\bin\HostX64\x64\nmake.exe"”: 返回代碼“0x2”
Stop.

這2個.t看不太懂. 估計也是和zlib庫位置相關.
準備安裝后(nmake install)后, 再手工測試一下, zlib特性是否正常.
安裝后的目錄c:\openssl_3d2拷貝到 D:\my_dev\lib\openssl_3d2, 看到.bin目錄中沒有my_zlib_1d3.dll, 自己補了一個.
怪不得網上資料, 大部分openssl編譯都是用的zlib靜態庫, 原來openssl用動態庫這么麻煩.

測試zlib特性在安裝好的目錄中是否正常

在安裝后, 拷貝的目錄(D:\my_dev\lib\openssl_3d2)中來測試.

先在源碼編譯目錄(D:\3rd_prj\crypt\openssl-3.2.0)記錄一下測試的日志

nmake test > my_log_nmake_test.txt 2>&1

然后根據日志, 在安裝拷貝完的目錄(D:\my_dev\lib\openssl_3d2)中模擬報錯的測試日志做測試.

筆記

只能在openssl源碼目錄中測試.
從日志中看到了測試的命令行, 整理了一個腳本

rem my_nmake_test.bat
cmd /C "set "SRCTOP=." & set "BLDTOP=." & set "PERL=C:\Perl\bin\perl.exe" & set "FIPSKEY=f4556650ac31d35461610bac4ed81b1a181b2d8a43ea2854cbae22ca74560813" & "C:\Perl\bin\perl.exe" ".\test\run_tests.pl" "

這個腳本依賴環境和配置, 在安裝后的目錄, 測試失敗. 必須在源碼編譯目錄運行.
將test目錄壓縮備份, 然后將test目錄中, 只有70-test_tls13certcomp.t/80-test_cms.t, 來單獨測試

因為安裝前的openssl.exe在 D:\3rd_prj\crypt\openssl-3.2.0\apps
將my_zlib_1d3.dll拷貝到D:\3rd_prj\crypt\openssl-3.2.0\apps
將test目錄壓縮備份.
將 D:\3rd_prj\crypt\openssl-3.2.0\test\recipes 目錄改名為 D:\3rd_prj\crypt\openssl-3.2.0\test\recipes_
然后新建一個目錄 D:\3rd_prj\crypt\openssl-3.2.0\test\recipes作為測試目錄

70-test_tls13certcomp.t

將recipes_中的70-test_tls13certcomp.t拷貝到 D:\3rd_prj\crypt\openssl-3.2.0\test\recipes
現在 D:\3rd_prj\crypt\openssl-3.2.0\test\recipes目錄中只有70-test_tls13certcomp.t
將 my_nmake_test.bat 拷貝到D:\3rd_prj\crypt\openssl-3.2.0, 運行 my_nmake_test.bat


D:\3rd_prj\crypt\openssl-3.2.0>my_nmake_test.batD:\3rd_prj\crypt\openssl-3.2.0>rem my_nmake_test.batD:\3rd_prj\crypt\openssl-3.2.0>cmd /C "set "SRCTOP=." & set "BLDTOP=." & set "PERL=C:\Perl\bin\perl.exe" & set "FIPSKEY=f4556650ac31d35461610bac4ed81b1a181b2d8a43ea2854cbae22ca74560813" & "C:\Perl\bin\perl.exe" ".\test\run_tests.pl" "
Files=0, Tests=0,  0 wallclock secs ( 0.00 usr +  0.00 sys =  0.00 CPU)
Result: NOTESTS
70-test_tls13certcomp.t .. ok
All tests successful.
Files=1, Tests=8, 19 wallclock secs ( 0.09 usr +  0.00 sys =  0.09 CPU)
Result: PASSD:\3rd_prj\crypt\openssl-3.2.0>

可以看到, 在安裝完后, 單獨測試70-test_tls13certcomp.t是通過的.

80-test_cms.t

將 D:\3rd_prj\crypt\openssl-3.2.0\test\recipes中的70-test_tls13certcomp.t刪掉.
將備份目錄D:\3rd_prj\crypt\openssl-3.2.0\test\recipes_中關于80-test_cms.t相關的東西拷貝過來, 如下
在這里插入圖片描述
然后在源碼編譯的根目錄運行 my_nmake_test.bat


D:\3rd_prj\crypt\openssl-3.2.0>my_nmake_test.batD:\3rd_prj\crypt\openssl-3.2.0>rem my_nmake_test.batD:\3rd_prj\crypt\openssl-3.2.0>cmd /C "set "SRCTOP=." & set "BLDTOP=." & set "PERL=C:\Perl\bin\perl.exe" & set "FIPSKEY=f4556650ac31d35461610bac4ed81b1a181b2d8a43ea2854cbae22ca74560813" & "C:\Perl\bin\perl.exe" ".\test\run_tests.pl" "
Files=0, Tests=0,  0 wallclock secs ( 0.02 usr +  0.00 sys =  0.02 CPU)
Result: NOTESTS
80-test_cms.t .. ok
All tests successful.
Files=1, Tests=22, 19 wallclock secs ( 0.02 usr +  0.00 sys =  0.02 CPU)
Result: PASSD:\3rd_prj\crypt\openssl-3.2.0>

可以看到, 單獨測試也是成功的.

對測試環境的猜測

單獨測試成功
在編譯環境中nmake test失敗.
比對一下, 可以發現, 區別是我現在手工拷貝了my_zlib_1d3.dll拷貝到D:\3rd_prj\crypt\openssl-3.2.0\apps
因為未安裝前的openssl相關的exe和dll都在my_zlib_1d3.dll拷貝到D:\3rd_prj\crypt\openssl-3.2.0\apps
apps目錄中的openssl相關的exe, dll因為依賴my_zlib_1d3.dll, 所以必須要手工拷貝過去, 才能讓openssl相關接口運行正常.

那現在直接在源碼編譯目錄運行nmake test, 試試, 應該也是能全部測試通過的.
試試

將備份的D:\3rd_prj\crypt\openssl-3.2.0\test\recipes復原, 里面包含原始的所有測試用例.

D:\3rd_prj\crypt\openssl-3.2.0>nmake test
// ...
99-test_fuzz_server.t ................... ok
99-test_fuzz_smime.t .................... ok
99-test_fuzz_v3name.t ................... ok
99-test_fuzz_x509.t ..................... ok
All tests successful.
Files=294, Tests=3418, 1009 wallclock secs ( 5.88 usr +  1.17 sys =  7.05 CPU)
Result: PASSD:\3rd_prj\crypt\openssl-3.2.0>

全部測試通過.
果真和自己想的一樣, 就是\app目錄中, 沒有my_zlib_1d3.dll引起的測試失敗.

從頭再編譯測試安裝一次

解開官方源碼包打開vs2019x64本地命令行, 選擇管理員身份運行cd /d D:\3rd_prj\crypt\openssl-3.2.0set path=c:\nasm;%path%perl Configure VC-WIN64A --debug zlib-dynamic --with-zlib-include=D:\my_dev\lib\zlib_1d3 --with-zlib-lib=.\my_zlib_1d3.dll --prefix=c:\openssl_3d2 --openssldir=c:\openssl_3d2\commonnmake

此時, nmake已經完成.
查一下*.dll的位置, 主要是看libcrypto-3-x64.dll在哪些目錄中
在這里插入圖片描述
可以看出, 主要是4個目錄

.\
.\apps
.\fuzz
.\test

將自己的zlib.dll拷貝到這4個目錄
對于我自己的環境, 拷貝情況如下:

D:\my_dev\lib\zlib_1d3\my_zlib_1d3.dll => D:\3rd_prj\crypt\openssl-3.2.0\my_zlib_1d3.dll
D:\my_dev\lib\zlib_1d3\my_zlib_1d3.dll => D:\3rd_prj\crypt\openssl-3.2.0\apps\my_zlib_1d3.dll
D:\my_dev\lib\zlib_1d3\my_zlib_1d3.dll => D:\3rd_prj\crypt\openssl-3.2.0\fuzz\my_zlib_1d3.dll
D:\my_dev\lib\zlib_1d3\my_zlib_1d3.dll => D:\3rd_prj\crypt\openssl-3.2.0\test\my_zlib_1d3.dll

然后繼續openssl的測試和安裝

nmake test
// ...
99-test_fuzz_x509.t ..................... ok
All tests successful.
Files=294, Tests=3418, 990 wallclock secs ( 6.36 usr +  0.97 sys =  7.33 CPU)
Result: PASS

openssl測試全部通過, 猜測是正確的.
在使用openssl之前, 必須將依賴的dll(e.g. zlib.dll)擺對位置.
開始安裝

nmake install

安裝完成后, 搜索*.dll, 可以看到依賴的dll(e.g. zlib.dll)沒有被拷貝過來.
在這里插入圖片描述
手工拷貝zlib.dll到安裝后的bin目錄.

D:\my_dev\lib\zlib_1d3\my_zlib_1d3.dll => C:\openssl_3d2\bin\my_zlib_1d3.dll

在這里插入圖片描述
現在可以將安裝好的openssl發布目錄C:\openssl_3d2剪切到自己的庫目錄了 => D:\my_dev\lib\openssl_3d2

測試一下隨便改變位置的openssl用到zlib時是否好使

就用普通的cmd窗口.

cd /d D:\my_dev\lib\openssl_3d2\bin
openssl zlib -list
// 下面是輸出
Supported ciphers:
-aes-128-cbc               -aes-128-cfb               -aes-128-cfb1
-aes-128-cfb8              -aes-128-ctr               -aes-128-ecb
-aes-128-ofb               -aes-192-cbc               -aes-192-cfb
-aes-192-cfb1              -aes-192-cfb8              -aes-192-ctr
-aes-192-ecb               -aes-192-ofb               -aes-256-cbc
-aes-256-cfb               -aes-256-cfb1              -aes-256-cfb8
-aes-256-ctr               -aes-256-ecb               -aes-256-ofb
-aes128                    -aes128-wrap               -aes128-wrap-pad
-aes192                    -aes192-wrap               -aes192-wrap-pad
-aes256                    -aes256-wrap               -aes256-wrap-pad
-aria-128-cbc              -aria-128-cfb              -aria-128-cfb1
-aria-128-cfb8             -aria-128-ctr              -aria-128-ecb
-aria-128-ofb              -aria-192-cbc              -aria-192-cfb
-aria-192-cfb1             -aria-192-cfb8             -aria-192-ctr
-aria-192-ecb              -aria-192-ofb              -aria-256-cbc
-aria-256-cfb              -aria-256-cfb1             -aria-256-cfb8
-aria-256-ctr              -aria-256-ecb              -aria-256-ofb
-aria128                   -aria192                   -aria256
-bf                        -bf-cbc                    -bf-cfb
-bf-ecb                    -bf-ofb                    -blowfish
-camellia-128-cbc          -camellia-128-cfb          -camellia-128-cfb1
-camellia-128-cfb8         -camellia-128-ctr          -camellia-128-ecb
-camellia-128-ofb          -camellia-192-cbc          -camellia-192-cfb
-camellia-192-cfb1         -camellia-192-cfb8         -camellia-192-ctr
-camellia-192-ecb          -camellia-192-ofb          -camellia-256-cbc
-camellia-256-cfb          -camellia-256-cfb1         -camellia-256-cfb8
-camellia-256-ctr          -camellia-256-ecb          -camellia-256-ofb
-camellia128               -camellia192               -camellia256
-cast                      -cast-cbc                  -cast5-cbc
-cast5-cfb                 -cast5-ecb                 -cast5-ofb
-chacha20                  -des                       -des-cbc
-des-cfb                   -des-cfb1                  -des-cfb8
-des-ecb                   -des-ede                   -des-ede-cbc
-des-ede-cfb               -des-ede-ecb               -des-ede-ofb
-des-ede3                  -des-ede3-cbc              -des-ede3-cfb
-des-ede3-cfb1             -des-ede3-cfb8             -des-ede3-ecb
-des-ede3-ofb              -des-ofb                   -des3
-des3-wrap                 -desx                      -desx-cbc
-id-aes128-wrap            -id-aes128-wrap-pad        -id-aes192-wrap
-id-aes192-wrap-pad        -id-aes256-wrap            -id-aes256-wrap-pad
-id-smime-alg-CMS3DESwrap  -idea                      -idea-cbc
-idea-cfb                  -idea-ecb                  -idea-ofb
-rc2                       -rc2-128                   -rc2-40
-rc2-40-cbc                -rc2-64                    -rc2-64-cbc
-rc2-cbc                   -rc2-cfb                   -rc2-ecb
-rc2-ofb                   -rc4                       -rc4-40
-seed                      -seed-cbc                  -seed-cfb
-seed-ecb                  -seed-ofb                  -sm4
-sm4-cbc                   -sm4-cfb                   -sm4-ctr
-sm4-ecb                   -sm4-ofb

可以看到沒有報錯, 說明openssl依賴的zlib.dll是正常的.

測試一下隨便改變位置的openssl未找到zlib.dll時是否報錯

將my_zlib_1d3.dll改個名字, 將后綴加個’_’
在這里插入圖片描述
用 openssl zlib -list 命令行再測試一下.


D:\my_dev\lib\openssl_3d2\bin>openssl zlib -list
Supported ciphers:
-aes-128-cbc               -aes-128-cfb               -aes-128-cfb1
-aes-128-cfb8              -aes-128-ctr               -aes-128-ecb
-aes-128-ofb               -aes-192-cbc               -aes-192-cfb
-aes-192-cfb1              -aes-192-cfb8              -aes-192-ctr
-aes-192-ecb               -aes-192-ofb               -aes-256-cbc
-aes-256-cfb               -aes-256-cfb1              -aes-256-cfb8
-aes-256-ctr               -aes-256-ecb               -aes-256-ofb
-aes128                    -aes128-wrap               -aes128-wrap-pad
-aes192                    -aes192-wrap               -aes192-wrap-pad
-aes256                    -aes256-wrap               -aes256-wrap-pad
-aria-128-cbc              -aria-128-cfb              -aria-128-cfb1
-aria-128-cfb8             -aria-128-ctr              -aria-128-ecb
-aria-128-ofb              -aria-192-cbc              -aria-192-cfb
-aria-192-cfb1             -aria-192-cfb8             -aria-192-ctr
-aria-192-ecb              -aria-192-ofb              -aria-256-cbc
-aria-256-cfb              -aria-256-cfb1             -aria-256-cfb8
-aria-256-ctr              -aria-256-ecb              -aria-256-ofb
-aria128                   -aria192                   -aria256
-bf                        -bf-cbc                    -bf-cfb
-bf-ecb                    -bf-ofb                    -blowfish
-camellia-128-cbc          -camellia-128-cfb          -camellia-128-cfb1
-camellia-128-cfb8         -camellia-128-ctr          -camellia-128-ecb
-camellia-128-ofb          -camellia-192-cbc          -camellia-192-cfb
-camellia-192-cfb1         -camellia-192-cfb8         -camellia-192-ctr
-camellia-192-ecb          -camellia-192-ofb          -camellia-256-cbc
-camellia-256-cfb          -camellia-256-cfb1         -camellia-256-cfb8
-camellia-256-ctr          -camellia-256-ecb          -camellia-256-ofb
-camellia128               -camellia192               -camellia256
-cast                      -cast-cbc                  -cast5-cbc
-cast5-cfb                 -cast5-ecb                 -cast5-ofb
-chacha20                  -des                       -des-cbc
-des-cfb                   -des-cfb1                  -des-cfb8
-des-ecb                   -des-ede                   -des-ede-cbc
-des-ede-cfb               -des-ede-ecb               -des-ede-ofb
-des-ede3                  -des-ede3-cbc              -des-ede3-cfb
-des-ede3-cfb1             -des-ede3-cfb8             -des-ede3-ecb
-des-ede3-ofb              -des-ofb                   -des3
-des3-wrap                 -desx                      -desx-cbc
-id-aes128-wrap            -id-aes128-wrap-pad        -id-aes192-wrap
-id-aes192-wrap-pad        -id-aes256-wrap            -id-aes256-wrap-pad
-id-smime-alg-CMS3DESwrap  -idea                      -idea-cbc
-idea-cfb                  -idea-ecb                  -idea-ofb
-rc2                       -rc2-128                   -rc2-40
-rc2-40-cbc                -rc2-64                    -rc2-64-cbc
-rc2-cbc                   -rc2-cfb                   -rc2-ecb
-rc2-ofb                   -rc4                       -rc4-40
-seed                      -seed-cbc                  -seed-cfb
-seed-ecb                  -seed-ofb                  -sm4
-sm4-cbc                   -sm4-cfb                   -sm4-ctr
-sm4-ecb                   -sm4-ofb
D4B80400:error:12800067:DSO support routines:win32_load:could not load the shared library:crypto\dso\dso_win32.c:108:filename(.\\my_zlib_1d3.dll)
D4B80400:error:12800067:DSO support routines:DSO_load:could not load the shared library:crypto\dso\dso_lib.c:147:D:\my_dev\lib\openssl_3d2\bin>

可以看到有報錯, 說沒有找到’.\my_zlib_1d3.dll’

總結

這說明讓openssl編譯選項中的動態依賴的dll為.\x.dll, 是比較好的方法.
只要openssl的組件和依賴的dll同目錄時, 就可以讓編譯完的openssl輸出的組件隨意變動位置, 都可以正常運行.

END

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/697017.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/697017.shtml
英文地址,請注明出處:http://en.pswp.cn/news/697017.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

Docker Nginx 負載均衡搭建(服務宕機-配置高可用) - 附(Python案例,其它語言同理)

目錄 一 . 概要 1. 什么是負載均衡 2. 負載均衡有哪些優勢? (1)應用程序可用性 (2)應用程序可擴展性 (3)應用程序安全 (4)應用程序性能 3 . Nginx負載均衡調度策…

Java高級 / 架構師 場景方案 面試題(二)

1.雙十一億級用戶日活統計如何用 Redis快速計算 在雙十一這種億級用戶日活統計的場景中,使用Redis進行快速計算的關鍵在于利用Redis的數據結構和原子操作來高效地統計和計算數據。以下是一個基于Redis的日活統計方案: 選擇合適的數據結構: …

核密度分析

一.算法介紹 核密度估計(Kernel Density Estimation)是一種用于估計數據分布的非參數統計方法。它可以用于多種目的和應用,包括: 數據可視化:核密度估計可以用來繪制平滑的密度曲線或熱力圖,從而直觀地表…

【DOCKER】隨手記

目錄 1. 安裝1.1 LINUX1.2 Windows 2. 常用配置2.1 普通權限運行2.2 開機自啟動2.3 3 更換Docker鏡像源2.4 更改默認存儲位置 3. 顯示帶UI的軟件4. 基于DOCKER的服務4.1 FTP4.2 Portainer4.3 Watchtower4.4 SiYuan4.5 GitLab4.5.1 創建容器4.5.2 克隆路徑問題4.5.3 獲取默認密碼…

win系統下安裝php8.3版本并配置環境變量的詳細教程

本篇文章主要講解在win系統下安裝和配置php8.3版本,并配置環境變量的詳細教程。 日期:2024年2月22日 作者:任聰聰 一、下載php8.3版本包 php8.3版本官方下載地址:https://windows.php.net/download#php-8.3 步驟一、打開下載地址…

【Unity】Unity與安卓交互

問題描述 Unity和安卓手機進行交互,是我們開發游戲中最常見的場景。本教程將從一個簡單的例子來演示一下。 本教程需要用到Android Studio2021.1.1 1.Android Studio新建一個工程 2.選擇Empty Activity 然后點擊Next 3.點擊Finish完成創建 4.選擇File-New-New Mo…

【python 3.9.18】windowns安裝版

因為這個版本官方未提供,所以需要自己編譯出來,其他沒有的版本可以依據下面的進行生成一個exe也可行。 成品: https://gitee.com/greatLong/python-3.9.18/tree/master/python-3.9.18/PCbuild/amd64 1、環境準備 需要使用到 這里面還需要選…

【MATLAB GUI】 5. 圖像處理菜單(菜單編輯器)

看B站up主freexyn的freexyn編程實例視頻教程系列36Matlab GUI的學習筆記 任務要求設計一個圖像處理菜單,實現圖像的打開導入、灰度處理、存儲等功能 修改過文件名,所以運行的時候會有一點點報錯,但是不影響運行 打開工具欄下邊的菜單編輯器…

開窗Window和WindowAll的區別

在 Apache Flink 流處理框架中,窗口操作是處理流數據的重要部分。Flink 提供了時間窗口、計數窗口等多種窗口類型,用于將數據分割成不同的窗口進行聚合或其他處理。 Window 和 WindowAll 是 Flink 中窗口操作的兩種不同方式,它們分別對應不同…

GIT倉庫轉移--攜帶原分支及提交記錄

背景:最近公司倉庫位置需要移動,想保留原有的倉庫分支和提交記錄 操作: 目的位置新建倉庫(要保證創建無誤)原倉庫 git clone 到本地,git pull 保證代碼最新找到原倉庫.git/config 文件,修改 rem…

EPSON機器人與PC上位機軟件C#網絡TCP通訊

項目背景: 在非標設備PIN焊接機中用到了愛普生機器人。上位機軟件使用c#wpf開發。主要邏輯在上位機中。用愛普生機器人給焊接平臺實現自動上下料。 通訊方式:網絡TCP通訊,Socket 角色:上位機為服務端,機器人為客戶端…

Linux|centos7|錄屏神器asciinema的編譯安裝和離線化安裝使用

前言: asciinema這個錄屏軟件前面有一點研究,但它的部署安裝比較麻煩,雖然此軟件的安裝部署方式是很多的,比如yum安,apt,brew,docker,pip,rust編譯,docker等…

創建一個基于Node.js的實時聊天應用

在當今數字化社會,實時通訊已成為人們生活中不可或缺的一部分。無論是在社交媒體平臺上與朋友交流,還是在工作場合中與同事協作,實時聊天應用都扮演著重要角色。與此同時,Node.js作為一種流行的后端技術,為開發者提供了…

CrossOver虛擬機軟件2024有哪些功能?最新版本支持哪些游戲?

CrossOver由codewaver公司開發的類虛擬機軟件,目的是使linux和Mac OS X操作系統和window系統兼容。CrossOver不像Parallels或VMware的模擬器,而是實實在在Mac OS X系統上運行的一個軟件。CrossOvers能夠直接在Mac上運行Windows軟件與游戲,而不…

Java架構師之路七、大數據:Hadoop、Spark、Hive、HBase、Kafka等

目錄 Hadoop: Spark: Hive: HBase: Kafka: Java架構師之路六、高并發與性能優化:高并發編程、性能調優、線程池、NIO、Netty、高性能數據庫等。-CSDN博客Java架構師之路八、安全技術:Web安…

[前端]開啟VUE之路-NODE.js版本管理

VUE前端開發框架,以Node.js為底座。用歷史性的項目來學習,為了降低開發環境的影響因素,各種版本號最好能一致。前端項目也是一樣。為了項目能夠快速啟動,Node.js的版本管理,可以帶來很大的便利(node.js快速…

2023年全年回顧

本年度比較折騰,整體而言可以分為兩個大的階段,簡單而言,轉崗前和轉崗后。 個人收獲 據說程序員有幾大浪漫,比如操作系統、編譯器、瀏覽器、游戲引擎等。 之前參與過游戲引擎,現在有機會參與存儲業務交付&#xff0c…

LangChain支持嗶哩嗶哩視頻總結

是基于LangChain框架下的開發,所以最開始請先 pip install Langchain pip install bilibili-api-python 技術要點: 使用Langchain框架自帶的Document loaders 修改BiliBiliLoader的源碼,自帶的并不支持當前b站的視頻加載 源碼文件修改&a…

如何在 Emacs Prelude 上使用 graphviz 的 dot 繪制流程圖

文章目錄 如何在Emacs Prelude上使用graphviz的dot繪制流程圖 <2022-08-23 周二> 如何在Emacs Prelude上使用graphviz的dot繪制流程圖 標題中的Emacs Prelude是指&#xff1a;bbatsov/prelude&#xff0c;在custom.el中添加即可&#xff1a; ;;; graphviz (prelude-re…

【高德地圖】Android高德地圖繪制標記點Marker

&#x1f4d6;第4章 Android高德地圖繪制標記點Marker ?繪制默認 Marker?繪制多個Marker?繪制自定義 Marker?Marker點擊事件?Marker動畫效果?Marker拖拽事件?繪制默認 Infowindow&#x1f6a9;隱藏InfoWindow 彈框 ?繪制自定義 InfoWindow&#x1f6a9;實現 InfoWindow…