| |||||||
adm | Find | login register |
從 GTK+ 2.90.0 開始我就開始 daily use, 也嘗試 patch 各種 GTK+ 2.x 軟體。(結果最後成功用上 GTK+ 3.0.0 的只有 gcin 和 evilvte) Adobe flash 只給 binary, 只好用 hex editor 把 linking 硬改成 gtk3, 卻沒想到相容性一直是 100%,所有 flash 都能正常使用。 一開始覺得挺正常的,如果只用 GTK+ 2.x / 3.x 同時都有提供的 api, 是有可能做到。但隨著 GTK+ 3.x 和 2.x 相容性不斷降低,Adobe flash 卻都可以不用重新編譯,就顯得越來越奇怪了。(同時期的其它軟體 *全都* 需要重新編譯) 剛才無意中發現,Adobe flash 其實只有用到 /usr/lib/libgdk_pixbuf-2.0.so.0 的 symble。 libgdk_pixbuf-2.0.so.0 本來長期綁在 GTK+ 2.x 裡,但因為 GTK+ 3.x 也有用到,所以又分出來變成單獨的 tarball,讓 GTK+ 2.x / 3.x 可以依賴。 剛才檢查了 libgcflashplayer.so 10.2.154.12 和 libflashplayer.so 10.2.152.27,都確定只有用到 libgdk_pixbuf-2.0.so.0 的 symble。 (舊版的我沒檢查,但應該也一樣吧。) 實際試驗,用 hex editor 把 libgtk-x11-2.0.so.0 和 libgdk-x11-2.0.so.0 硬改成其它不相干的 lib, Adobe flash 仍能正常使用,玩 flash game 看 youtube flash mode 都毫無問題。(目前我是分別改成 libXss 和 libkeyutils,因為 chromium 本來就有這兩個依賴) 這樣也可以理解為啥 Adobe flash 長期不支援 GTK+ immodule…因為根本就沒在用嘛… 目前的 Adobe flash 不是 GTK+ app, 而且有用到 X11, 所以要移植到 wayland 可能還得費點工夫。 (GTK+ 2.x 沒有 wayland porting, 只有 GTK+ 3.x 有) edited: 1
| |||||||||||||
我在 firefox 是用 google chrome 的 libgcflashplayer.so,感覺是有用 gtk im module,用 grep 的方式看也可以看到一堆 gtk 的 functions $ strings libgcflashplayer.so | grep gtk gtk_image_new_from_pixbuf | |||||||||||||
可能是用 dlopen 之類的? | |||||||||||||
~$ ldd libgcflashplayer.so | grep g.k 在 web browser 的 flash 區域按右鍵也有 menu 出來,menu 看起來是 gtk | |||||||||||||
本來想找 Qt-basd web browser 實驗,不過搞半天都沒辦法吃 libgcflashplayer.so orz 總之用 chromium 完成了測試: 1. 把 libgcflashplayer.so 的相依性改掉,用 ldd 檢查沒 link 到 gtk2 2. 新開任何有 flash 的網頁,檢查 flash 的 pid 3. 把 libgtk-x11-2* 全部改名 4. 用 chromium 的 Task Manager 把 flash 幹掉 5. 檢查 flash 的 pid 確已消失 6. 再新開任何有 flash 的網頁 7. 發現 flash 起不來了(因為 dlopen gtk2 失敗?) 8. 把 libgtk-x11-2* 改回來 9. 再新開任何有 flash 的網頁 10. flash 回來了,確認 pid 和之前不同 11. 用 lsof 確認 flash 有載入 /usr/lib/libgdk-x11-2.0.so* 和 /usr/lib/libgtk-x11-2.0.so* 結論:Adobe flash 還是需要 gtk2 的。 orz 用上面手法把 gtk2 硬換成 gtk3 的結果 -> 錯誤訊息: /proc/self/exe: symbol lookup error: /proc/self/exe: undefined symbol: gdk_display |
| |||||||
adm | Find | login register |