Repository: qarmin/czkawka (language: rust)

Issue:
Error while loading shared libraries: libheif.so.1
I am trying to run `linux_czkawka_cli` on Linux, but I get the following error:

```
./linux_czkawka_cli: error while loading shared libraries: libheif.so.1: cannot open shared object file: No such file or directory
```

Do you know what I need to run it?

---

In the documentation there is written:

> You don't need to have any additional libraries for CLI Czkawka.

But this seems to be false.

And the funniest part is that I do not even need to run it on images!
(I only need the "Empty Directories" functionality and probably the "Duplicate Finder" one)



Discussion / hints:
Looks heif that library is dynamically loaded from OS(I expected that it will be built into binary, but I was wrong ¯\\\_(ツ)\_/¯)

The problem only happens with prebuilt binaries which use `heif` feature
https://github.com/qarmin/czkawka/blob/e20f30c66f3bde1659f6eaf20511e497825e0c5d/.github/workflows/linux.yml#L45

App manually compiled without this option should work fine only with GTK 4 libraries installed  
> Looks heif that library is dynamically loaded from OS(I expected that it will be built into binary, but I was wrong ¯\_(ツ)_/¯)
> 
> The problem only happens with prebuilt binaries which use `heif` feature
> 
> https://github.com/qarmin/czkawka/blob/e20f30c66f3bde1659f6eaf20511e497825e0c5d/.github/workflows/linux.yml#L45
> 
> App manually compiled without this option should work fine only with GTK 4 libraries installed

Does this mean that everyone who wants to run it on Linux must have that library installed (btw, which one exactly?), or manually build it?

However, I do not have the Rust building tools installed on my machine, so I cannot build it (and I believe many users will be in the same situation), so probably binaries that can be executed without any dependencies should be provided as well.

Moreover, I discovered that the same problem happens with the GUI. Therefore, you cannot run Czkawka at all if you do not have that library or do not manually build it.

You can download from actions binary without heif support - https://github.com/qarmin/czkawka/actions/runs/2883469684 (czkawka_gui-Linux-1.60.0  and czkawka_cli-Linux-1.60.0 )
On Ubuntu 22.04 this are required libraries to be able to run app
https://github.com/qarmin/czkawka/blob/d3e7c2d77720997d3ee729c1afc8ef7215cbe196/.github/workflows/linux.yml#L35
Thank you for your suggestion.

I downloaded, extracted and tried to run the cli (`czkawka_cli-Linux-1.60.0.zip`).
Unfortunately, I got the following errors:

```log
./czkawka_cli: /lib/x86_64-linux-gnu/libc.so.6: version `GLIBC_2.33' not found (required by ./czkawka_cli)
./czkawka_cli: /lib/x86_64-linux-gnu/libc.so.6: version `GLIBC_2.34' not found (required by ./czkawka_cli)
./czkawka_cli: /lib/x86_64-linux-gnu/libc.so.6: version `GLIBC_2.32' not found (required by ./czkawka_cli)
```

I have updated my OS (and all the packages) to their latest versions, but I still get that same error.

Any other suggestions?
Czkawka require glibc which is available on Ubuntu 22.04 or similar, so for me looks that this error is completely normal.
With 5.0.2 version, official binary not require heif library anymore.
> Czkawka require glibc which is available on Ubuntu 22.04 or similar, so for me looks that this error is completely normal. 

I have that library, as shown in the error message (you can see the path to it there).
I am not an expert, but I think the problem is with the version of that library.

This is the package in the latest stable version of Debian (Ubuntu is based on Debian):
https://packages.debian.org/source/stable/glibc
As you can see, the latest version is 2.31, while, from that error message, it seems that `czkawka_cli` is looking for versions '2.32-2.34'.

Can this be the problem?
Why is it looking for such recent versions (that are not supported by the latest stable version of one of the most popular Linux distributions)?

> With 5.0.2 version, official binary not require heif library anymore.

I can confirm that in v5.0.2 the problem mentioned in my first message disappeared.

I experience the same issue when using macOS:
```
dyld[78651]: Library not loaded: '/usr/local/opt/libheif/lib/libheif.1.dylib'
  Referenced from: '/Users/I501899/Downloads/mac_czkawka_cli'
  Reason: tried: '/usr/local/opt/libheif/lib/libheif.1.dylib' (no such file), '/usr/local/lib/libheif.1.dylib' (no such file), '/usr/lib/libheif.1.dylib' (no such file)
zsh: abort      ./mac_czkawka_cli
```

libheif is installed:
```
brew info libheif
==> libheif: stable 1.13.0 (bottled)
ISO/IEC 23008-12:2017 HEIF file format decoder and encoder
https://www.libde265.org/
/opt/homebrew/Cellar/libheif/1.13.0 (25 files, 2.8MB) *
  Poured from bottle on 2022-09-14 at 15:44:08
From: https://github.com/Homebrew/homebrew-core/blob/HEAD/Formula/libheif.rb
```

Looks like the CLI binary is looking in a different folder than where it is installed.

Hello.
It seems like rabbit hole is way more deeper than libheif on macOS.

`dyld_info ./mac_czkawka_gui`

returns:

```
/usr/local/opt/libheif/lib/libheif.1.dylib
/usr/local/opt/glib/lib/libgobject-2.0.0.dylib
/usr/local/opt/gtk4/lib/libgtk-4.1.dylib
/usr/local/opt/pango/lib/libpangocairo-1.0.0.dylib
/usr/local/opt/pango/lib/libpango-1.0.0.dylib
/usr/local/opt/harfbuzz/lib/libharfbuzz.0.dylib
/usr/local/opt/gdk-pixbuf/lib/libgdk_pixbuf-2.0.0.dylib
/usr/local/opt/cairo/lib/libcairo-gobject.2.dylib
/usr/local/opt/cairo/lib/libcairo.2.dylib
/usr/local/opt/graphene/lib/libgraphene-1.0.0.dylib
/usr/local/opt/glib/lib/libgio-2.0.0.dylib
/usr/local/opt/glib/lib/libglib-2.0.0.dylib
/usr/local/opt/gettext/lib/libintl.8.dylib
```

There should be workaround possible with `install_name_tool`.

I believe, there can be 2 real solutions:
1) Link binary by using `@loader_path/` or `@rpath/` - ideally bundle libs and provide installable pkg file. And don't forget to create app bundle for binary itself.
2) Provide static binary build (which can be impossible or final binary would be too big). 
Fast workaround should be:

`% install_name_tool -change /usr/local/opt/libheif/lib/libheif.1.dylib /opt/local/lib/libheif.1.dylib ./mac_czkawka_cli`

in my case (I'm using macports).

Before change:
```
% dyld_info ./mac_czkawka_cli | grep libheif
                       /usr/local/opt/libheif/lib/libheif.1.dylib
```

After change:
```
% dyld_info ./mac_czkawka_cli | grep libheif
                       /opt/local/lib/libheif.1.dylib
```

Fix patch:
diff --git a/.github/workflows/mac.yml b/.github/workflows/mac.yml
index 3e4e665ed..45e2a4124 100644
--- a/.github/workflows/mac.yml
+++ b/.github/workflows/mac.yml
@@ -41,7 +41,7 @@ jobs:
         run: brew install rust gtk4 libheif
 
       - name: Build Release
-        run: cargo build --release --features heif
+        run: cargo build --release
         env:
           CARGO_INCREMENTAL: 0
         if: ${{ matrix.type == 'release'}}
@@ -58,4 +58,24 @@ jobs:
         with:
           name: czkawka_gui-${{ runner.os }}-${{ matrix.toolchain }}
           path: target/release/czkawka_gui
+        if: ${{ matrix.type == 'release' }}
+
+      - name: Build Release Heif
+        run: cargo build --release --features heif
+        env:
+          CARGO_INCREMENTAL: 0
+        if: ${{ matrix.type == 'release'}}
+
+      - name: Store MacOS CLI Heif
+        uses: actions/upload-artifact@v3
+        with:
+          name: czkawka_cli-${{ runner.os }}-${{ matrix.toolchain }}-heif
+          path: target/release/czkawka_cli
+        if: ${{ matrix.type == 'release' }}
+
+      - name: Store MacOS GUI Heif
+        uses: actions/upload-artifact@v3
+        with:
+          name: czkawka_gui-${{ runner.os }}-${{ matrix.toolchain }}-heif
+          path: target/release/czkawka_gui
         if: ${{ matrix.type == 'release' }}
\ No newline at end of file
diff --git a/Cargo.lock b/Cargo.lock
index b0da7a1b1..288e476f3 100644
--- a/Cargo.lock
+++ b/Cargo.lock
@@ -125,12 +125,6 @@ version = "0.13.1"
 source = "registry+https://github.com/rust-lang/crates.io-index"
 checksum = "9e1b586273c5702936fe7b7d6896644d8be71e6314cfe09d3167c95f712589e8"
 
-[[package]]
-name = "base64"
-version = "0.20.0-alpha.1"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "149ea5dc24cb11513350770afebba32b68e3d2e356f9221351a2a1ee89112a82"
-
 [[package]]
 name = "base64ct"
 version = "1.5.3"
@@ -170,9 +164,9 @@ dependencies = [
 
 [[package]]
 name = "blake3"
-version = "1.3.2"
+version = "1.3.3"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "895adc16c8b3273fbbc32685a7d55227705eda08c01e77704020f3491924b44b"
+checksum = "42ae2468a89544a466886840aa467a25b766499f4f04bf7d9fcd10ecee9fccef"
 dependencies = [
  "arrayref",
  "arrayvec",
@@ -328,7 +322,7 @@ dependencies = [
  "js-sys",
  "num-integer",
  "num-traits",
- "time 0.1.44",
+ "time 0.1.45",
  "wasm-bindgen",
  "winapi",
 ]
@@ -503,9 +497,9 @@ dependencies = [
 
 [[package]]
 name = "cxx"
-version = "1.0.82"
+version = "1.0.83"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "d4a41a86530d0fe7f5d9ea779916b7cadd2d4f9add748b99c2c029cbbdfaf453"
+checksum = "bdf07d07d6531bfcdbe9b8b739b104610c6508dcc4d63b410585faf338241daf"
 dependencies = [
  "cc",
  "cxxbridge-flags",
@@ -515,9 +509,9 @@ dependencies = [
 
 [[package]]
 name = "cxx-build"
-version = "1.0.82"
+version = "1.0.83"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "06416d667ff3e3ad2df1cd8cd8afae5da26cf9cec4d0825040f88b5ca659a2f0"
+checksum = "d2eb5b96ecdc99f72657332953d4d9c50135af1bac34277801cc3937906ebd39"
 dependencies = [
  "cc",
  "codespan-reporting",
@@ -530,15 +524,15 @@ dependencies = [
 
 [[package]]
 name = "cxxbridge-flags"
-version = "1.0.82"
+version = "1.0.83"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "820a9a2af1669deeef27cb271f476ffd196a2c4b6731336011e0ba63e2c7cf71"
+checksum = "ac040a39517fd1674e0f32177648334b0f4074625b5588a64519804ba0553b12"
 
 [[package]]
 name = "cxxbridge-macro"
-version = "1.0.82"
+version = "1.0.83"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "a08a6e2fcc370a089ad3b4aaf54db3b1b4cee38ddabce5896b33eb693275f470"
+checksum = "1362b0ddcfc4eb0a1f57b68bd77dd99f0e826958a96abd0ae9bd092e114ffed6"
 dependencies = [
  "proc-macro2",
  "quote",
@@ -983,9 +977,9 @@ dependencies = [
 
 [[package]]
 name = "gdk-pixbuf"
-version = "0.16.3"
+version = "0.16.4"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "0ba3e42776d1466938add08211734738d5c76e863a25b7a8064c4433a74a1a26"
+checksum = "d3094f2b8578136d1929cade4e0fff82f573521b579e96cfc24af2458431f176"
 dependencies = [
  "bitflags",
  "gdk-pixbuf-sys",
@@ -1009,9 +1003,9 @@ dependencies = [
 
 [[package]]
 name = "gdk4"
-version = "0.5.2"
+version = "0.5.3"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "dc7fc4b05be1159056c57a08102ea494892f75ff8517f5518b0401e466f77c69"
+checksum = "237d840e2017e61a8f528261e3397f378b579aeb8c7b798b29bbec6d4890c843"
 dependencies = [
  "bitflags",
  "cairo-rs",
@@ -1025,9 +1019,9 @@ dependencies = [
 
 [[package]]
 name = "gdk4-sys"
-version = "0.5.2"
+version = "0.5.3"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "c057b794185a52862037526fb95aafabce9427fb98a7e9f5fe39a6f832c92822"
+checksum = "3b5dafeabcbabda52b39b28e0641c5767d56cd47f273291d1bf1bb846176a6a0"
 dependencies = [
  "cairo-sys-rs",
  "gdk-pixbuf-sys",
@@ -1121,9 +1115,9 @@ dependencies = [
 
 [[package]]
 name = "glib"
-version = "0.16.3"
+version = "0.16.5"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "50feee2f1e73be50e6634c901bfced69a0937c5e4e4673067ade85e093fa9bd7"
+checksum = "0cd04d150a2c63e6779f43aec7e04f5374252479b7bed5f45146d9c0e821f161"
 dependencies = [
  "bitflags",
  "futures-channel",
@@ -1208,9 +1202,9 @@ dependencies = [
 
 [[package]]
 name = "gsk4"
-version = "0.5.2"
+version = "0.5.3"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "5dcd01e485189515263f6d3ac8a624b1c0cd13c1097991e72d0cc0c145a303c0"
+checksum = "e349ef4df495fe0e3ed926294bace13dc560ac97fe0943c6646349fd4208d9ca"
 dependencies = [
  "bitflags",
  "cairo-rs",
@@ -1224,9 +1218,9 @@ dependencies = [
 
 [[package]]
 name = "gsk4-sys"
-version = "0.5.2"
+version = "0.5.3"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "f47c49111e33020615a6c6b78d755c8b54b8504143cae1bf972bccc03eaa3f59"
+checksum = "e0118e5fcfbcb8dbd16b50dc79781c1cd520f1cf620c09a973d08023ca89d719"
 dependencies = [
  "cairo-sys-rs",
  "gdk4-sys",
@@ -1240,9 +1234,9 @@ dependencies = [
 
 [[package]]
 name = "gtk4"
-version = "0.5.2"
+version = "0.5.3"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "b4c61a704ecdedd1c0ca66ff0184bd19e9c488835bb391655bfe6b60f6e2e43e"
+checksum = "2568accd16cfbeecaf961bd762d88888ee9f4bb161ab5d5cfc9517d62bdb4155"
 dependencies = [
  "bitflags",
  "cairo-rs",
@@ -1263,9 +1257,9 @@ dependencies = [
 
 [[package]]
 name = "gtk4-macros"
-version = "0.5.2"
+version = "0.5.3"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "42f57e7025a8bae8429e07aeeae9c4c3fef5d7cd14834afdd6d6d23f76984246"
+checksum = "8ed8c00535fa1cb4b6d0e6548b0077148076c5ed8d46fc6e685cff5ee635529f"
 dependencies = [
  "anyhow",
  "proc-macro-crate",
@@ -1277,9 +1271,9 @@ dependencies = [
 
 [[package]]
 name = "gtk4-sys"
-version = "0.5.2"
+version = "0.5.3"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "42e1bb57be47aac6ce77b5281ad64389a19db5aba6db75b07f0049571ad6fe0f"
+checksum = "6bc9fe486789d3a43c1e2bf9f547964ec0181e5df5b9cdc214f88d335f8257ed"
 dependencies = [
  "cairo-sys-rs",
  "gdk-pixbuf-sys",
@@ -1472,11 +1466,11 @@ dependencies = [
 
 [[package]]
 name = "image_hasher"
-version = "1.1.1"
+version = "1.1.2"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "ea0369096d76c8fe2d3d2a59d1720743a5caf44787e9a6348ef380484fe1ea46"
+checksum = "a465709ca502270eba7ae8129c6a680f5668748d7edafa85da0f8ceae596bb2b"
 dependencies = [
- "base64 0.20.0-alpha.1",
+ "base64",
  "image",
  "rustdct 0.7.1",
  "serde",
@@ -1612,9 +1606,9 @@ checksum = "03087c2bad5e1034e8cace5926dec053fb3790248370865f5117a7d0213354c8"
 
 [[package]]
 name = "libc"
-version = "0.2.137"
+version = "0.2.138"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "fc7fcc620a3bff7cdd7a365be3376c97191aeaccc2a603e600951e452615bf89"
+checksum = "db6d7e329c562c5dfab7a46a2afabc8b987ab9a4834c9d1ca04dc54c1546cef8"
 
 [[package]]
 name = "libheif-rs"
@@ -1685,7 +1679,7 @@ version = "0.9.0"
 source = "registry+https://github.com/rust-lang/crates.io-index"
 checksum = "8242df2d720c7f2e23bb7829da4447e5a762ccf0a361a01efe1433f554a48400"
 dependencies = [
- "base64 0.13.1",
+ "base64",
  "byteorder",
  "cfg-if",
  "flate2",
@@ -1970,9 +1964,9 @@ checksum = "b15813163c1d831bf4a13c3610c05c0d03b39feb07f7e09fa234dac9b15aaf39"
 
 [[package]]
 name = "pango"
-version = "0.16.3"
+version = "0.16.5"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "f6a83cd4015382dbb0f4fcf3ab7b277d4885711a62b2f2c1e6582a120094edad"
+checksum = "cdff66b271861037b89d028656184059e03b0b6ccb36003820be19f7200b1e94"
 dependencies = [
  "bitflags",
  "gio",
@@ -2006,9 +2000,9 @@ dependencies = [
 
 [[package]]
 name = "parking_lot_core"
-version = "0.9.4"
+version = "0.9.5"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "4dc9e0dc2adc1c69d09143aff38d3d30c5c3f0df0dad82e6d25547af174ebec0"
+checksum = "7ff9f3fef3968a3ec5945535ed654cb38ff72d7495a25619e2247fb15a2ed9ba"
 dependencies = [
  "cfg-if",
  "libc",
@@ -2099,9 +2093,9 @@ checksum = "478c572c3d73181ff3c2539045f6eb99e5491218eae919370993b890cdbdd98e"
 
 [[package]]
 name = "pest"
-version = "2.5.0"
+version = "2.5.1"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "5f400b0f7905bf702f9f3dc3df5a121b16c54e9e8012c082905fdf09a931861a"
+checksum = "cc8bed3549e0f9b0a2a78bf7c0018237a2cdf085eecbbc048e52612438e4e9d0"
 dependencies = [
  "thiserror",
  "ucd-trie",
@@ -2530,18 +2524,18 @@ dependencies = [
 
 [[package]]
 name = "serde"
-version = "1.0.147"
+version = "1.0.149"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "d193d69bae983fc11a79df82342761dfbf28a99fc8d203dca4c3c1b590948965"
+checksum = "256b9932320c590e707b94576e3cc1f7c9024d0ee6612dfbcf1cb106cbe8e055"
 dependencies = [
  "serde_derive",
 ]
 
 [[package]]
 name = "serde_derive"
-version = "1.0.147"
+version = "1.0.149"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "4f1d362ca8fc9c3e3a7484440752472d68a6caa98f1ab81d99b5dfe517cec852"
+checksum = "b4eae9b04cbffdfd550eb462ed33bc6a1b68c935127d008b27444d08380f94e4"
 dependencies = [
  "proc-macro2",
  "quote",
@@ -2871,9 +2865,9 @@ dependencies = [
 
 [[package]]
 name = "syn"
-version = "1.0.103"
+version = "1.0.105"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "a864042229133ada95abf3b54fdc62ef5ccabe9515b64717bcb9a1919e59445d"
+checksum = "60b9b43d45702de4c839cb9b51d9f529c5dd26a4aff255b42b1ebc03e88ee908"
 dependencies = [
  "proc-macro2",
  "quote",
@@ -2973,9 +2967,9 @@ dependencies = [
 
 [[package]]
 name = "time"
-version = "0.1.44"
+version = "0.1.45"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "6db9e6914ab8b1ae1c260a4ae7a49b6c5611b40328a735b21862567685e73255"
+checksum = "1b797afad3f312d1c66a56d11d0316f916356d11bd158fbc6ca6389ff6bf805a"
 dependencies = [
  "libc",
  "wasi 0.10.0+wasi-snapshot-preview1",
@@ -3116,9 +3110,9 @@ dependencies = [
 
 [[package]]
 name = "trash"
-version = "2.1.5"
+version = "3.0.0"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "fe090367848cd40c4230ff3ce4e2ff6a2fd511c1e14ae047a4a4c37ef7965236"
+checksum = "6f74274f95c7e7340d7c5bcd4863af87a9ed6a117cf73cf483c71cb4d744a948"
 dependencies = [
  "chrono",
  "libc",
@@ -3127,7 +3121,7 @@ dependencies = [
  "once_cell",
  "scopeguard",
  "url",
- "windows 0.37.0",
+ "windows 0.43.0",
 ]
 
 [[package]]
@@ -3147,9 +3141,9 @@ dependencies = [
 
 [[package]]
 name = "typenum"
-version = "1.15.0"
+version = "1.16.0"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "dcf81ac59edc17cc8697ff311e8f5ef2d99fcbd9817b34cec66f90b6c3dfd987"
+checksum = "497961ef93d974e23eb6f433eb5fe1b7930b659f06d12dec6fc44a8f554c0bba"
 
 [[package]]
 name = "ucd-trie"
@@ -3393,15 +3387,17 @@ dependencies = [
 
 [[package]]
 name = "windows"
-version = "0.37.0"
+version = "0.43.0"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "57b543186b344cc61c85b5aab0d2e3adf4e0f99bc076eff9aa5927bcc0b8a647"
+checksum = "04662ed0e3e5630dfa9b26e4cb823b817f1a9addda855d973a9458c236556244"
 dependencies = [
- "windows_aarch64_msvc 0.37.0",
- "windows_i686_gnu 0.37.0",
- "windows_i686_msvc 0.37.0",
- "windows_x86_64_gnu 0.37.0",
- "windows_x86_64_msvc 0.37.0",
+ "windows_aarch64_gnullvm",
+ "windows_aarch64_msvc 0.42.0",
+ "windows_i686_gnu 0.42.0",
+ "windows_i686_msvc 0.42.0",
+ "windows_x86_64_gnu 0.42.0",
+ "windows_x86_64_gnullvm",
+ "windows_x86_64_msvc 0.42.0",
 ]
 
 [[package]]
@@ -3431,12 +3427,6 @@ version = "0.32.0"
 source = "registry+https://github.com/rust-lang/crates.io-index"
 checksum = "d8e92753b1c443191654ec532f14c199742964a061be25d77d7a96f09db20bf5"
 
-[[package]]
-name = "windows_aarch64_msvc"
-version = "0.37.0"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "2623277cb2d1c216ba3b578c0f3cf9cdebeddb6e66b1b218bb33596ea7769c3a"
-
 [[package]]
 name = "windows_aarch64_msvc"
 version = "0.42.0"
@@ -3449,12 +3439,6 @@ version = "0.32.0"
 source = "registry+https://github.com/rust-lang/crates.io-index"
 checksum = "6a711c68811799e017b6038e0922cb27a5e2f43a2ddb609fe0b6f3eeda9de615"
 
-[[package]]
-name = "windows_i686_gnu"
-version = "0.37.0"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "d3925fd0b0b804730d44d4b6278c50f9699703ec49bcd628020f46f4ba07d9e1"
-
 [[package]]
 name = "windows_i686_gnu"
 version = "0.42.0"
@@ -3467,12 +3451,6 @@ version = "0.32.0"
 source = "registry+https://github.com/rust-lang/crates.io-index"
 checksum = "146c11bb1a02615db74680b32a68e2d61f553cc24c4eb5b4ca10311740e44172"
 
-[[package]]
-name = "windows_i686_msvc"
-version = "0.37.0"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "ce907ac74fe331b524c1298683efbf598bb031bc84d5e274db2083696d07c57c"
-
 [[package]]
 name = "windows_i686_msvc"
 version = "0.42.0"
@@ -3485,12 +3463,6 @@ version = "0.32.0"
 source = "registry+https://github.com/rust-lang/crates.io-index"
 checksum = "c912b12f7454c6620635bbff3450962753834be2a594819bd5e945af18ec64bc"
 
-[[package]]
-name = "windows_x86_64_gnu"
-version = "0.37.0"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "2babfba0828f2e6b32457d5341427dcbb577ceef556273229959ac23a10af33d"
-
 [[package]]
 name = "windows_x86_64_gnu"
 version = "0.42.0"
@@ -3509,12 +3481,6 @@ version = "0.32.0"
 source = "registry+https://github.com/rust-lang/crates.io-index"
 checksum = "504a2476202769977a040c6364301a3f65d0cc9e3fb08600b2bda150a0488316"
 
-[[package]]
-name = "windows_x86_64_msvc"
-version = "0.37.0"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "f4dd6dc7df2d84cf7b33822ed5b86318fb1781948e9663bacd047fc9dd52259d"
-
 [[package]]
 name = "windows_x86_64_msvc"
 version = "0.42.0"
diff --git a/czkawka_cli/Cargo.toml b/czkawka_cli/Cargo.toml
index 9e3f90c95..c718b3b02 100644
--- a/czkawka_cli/Cargo.toml
+++ b/czkawka_cli/Cargo.toml
@@ -13,7 +13,7 @@ repository = "https://github.com/qarmin/czkawka"
 clap = { version = "3.2.23", features = ["derive"] }
 
 # For enum types
-image_hasher = "1.1.1"
+image_hasher = "1.1.2"
 
 [dependencies.czkawka_core]
 path = "../czkawka_core"
diff --git a/czkawka_core/Cargo.toml b/czkawka_core/Cargo.toml
index 135e7cd3c..c00f02661 100644
--- a/czkawka_core/Cargo.toml
+++ b/czkawka_core/Cargo.toml
@@ -19,7 +19,7 @@ crossbeam-channel = "0.5.6"
 directories-next = "2.0.0"
 
 # Needed by similar images
-image_hasher = "1.1.1"
+image_hasher = "1.1.2"
 bk-tree = "0.4.0"
 image = "0.24.5"
 hamming = "0.1.3"
@@ -37,7 +37,7 @@ audio_checker = "0.1.0"
 pdf = "0.7.2"
 
 # Hashes for duplicate files
-blake3 = "1.3.2"
+blake3 = "1.3.3"
 crc32fast = "1.3.2"
 xxhash-rust = { version = "0.8.6", features = ["xxh3"] }
 
@@ -48,7 +48,7 @@ vid_dup_finder_lib = "0.1.1"
 ffmpeg_cmdline_utils = "0.1.2"
 
 # Saving/Loading Cache
-serde = "1.0.147"
+serde = "1.0.149"
 bincode = "1.3.3"
 serde_json = "1.0.89"
 
diff --git a/czkawka_gui/Cargo.toml b/czkawka_gui/Cargo.toml
index ce15468d3..28b69d97e 100644
--- a/czkawka_gui/Cargo.toml
+++ b/czkawka_gui/Cargo.toml
@@ -10,8 +10,8 @@ homepage = "https://github.com/qarmin/czkawka"
 repository = "https://github.com/qarmin/czkawka"
 
 [dependencies]
-gdk4 = "0.5.2"
-glib = "0.16.3"
+gdk4 = "0.5.3"
+glib = "0.16.5"
 
 humansize = "2.1.2"
 chrono = "0.4.23"
@@ -35,10 +35,10 @@ image = "0.24.5"
 regex = "1.7.0"
 
 # To get image_hasher types
-image_hasher = "1.1.1"
+image_hasher = "1.1.2"
 
 # Move files to trash
-trash = "2.1.5"
+trash = "3.0.0"
 
 # For moving files(why std::fs doesn't have such features)
 fs_extra = "1.2.0"
@@ -53,7 +53,7 @@ once_cell = "1.16.0"
 winapi = { version = "0.3.9", features = ["combaseapi", "objbase", "shobjidl_core", "windef", "winerror", "wtypesbase", "winuser"] }
 
 [dependencies.gtk4]
-version = "0.5.2"
+version = "0.5.3"
 default-features = false
 features = ["v4_6"]
 
diff --git a/czkawka_gui/src/connect_things/connect_button_compare.rs b/czkawka_gui/src/connect_things/connect_button_compare.rs
index dc323b51a..876c5002d 100644
--- a/czkawka_gui/src/connect_things/connect_button_compare.rs
+++ b/czkawka_gui/src/connect_things/connect_button_compare.rs
@@ -626,7 +626,7 @@ fn update_bottom_buttons(
         let is_chosen = cache_tree_path != right_tree_view && cache_tree_path != left_tree_view;
 
         let bx = i.downcast::<gtk4::Box>().unwrap();
-        let smaller_bx = get_all_direct_children(&bx)[0].clone().downcast::<gtk4::Box>().unwrap();
+        let smaller_bx = bx.first_child().unwrap().downcast::<gtk4::Box>().unwrap();
         for items in get_all_direct_children(&smaller_bx) {
             if let Ok(btn) = items.downcast::<gtk4::Button>() {
                 btn.set_sensitive(is_chosen);
diff --git a/czkawka_gui/src/gui_structs/gui_data.rs b/czkawka_gui/src/gui_structs/gui_data.rs
index 474447040..b613dd2b2 100644
--- a/czkawka_gui/src/gui_structs/gui_data.rs
+++ b/czkawka_gui/src/gui_structs/gui_data.rs
@@ -117,7 +117,6 @@ impl GuiData {
         window_main.show();
 
         let pixbuf = Pixbuf::from_read(std::io::BufReader::new(&ICON_ABOUT[..])).unwrap();
-        // window_main.set_icon(Some(&pixbuf)); // TODO
 
         window_main.set_application(Some(application));
 
diff --git a/czkawka_gui/src/gui_structs/gui_upper_notebook.rs b/czkawka_gui/src/gui_structs/gui_upper_notebook.rs
index 74ff9124c..f30f2e644 100644
--- a/czkawka_gui/src/gui_structs/gui_upper_notebook.rs
+++ b/czkawka_gui/src/gui_structs/gui_upper_notebook.rs
@@ -158,7 +158,7 @@ impl GuiUpperNotebook {
         self.entry_general_maximal_size.set_tooltip_text(Some(&flg!("main_label_size_bytes_tooltip")));
 
         let vec_children: Vec<gtk4::Widget> = get_all_direct_children(&self.notebook_upper);
-        let vec_children: Vec<gtk4::Widget> = get_all_direct_children(&vec_children[1]);
+        let vec_children: Vec<gtk4::Widget> = get_all_direct_children(&vec_children[1]); // This is quite safe in GTK 4, because tab label is always second child
 
         // Change name of upper notebook tabs
         for (upper_enum, fl_thing) in [


Test patch: