作者sppmg (sppmg)
看板Linux
標題[問題] debian 編譯 exiv2 (avif 的 EXIF 問題)
時間Mon Jun 13 21:56:46 2022
近期想把相片轉 avif 保存。
OS 使用 Debian stable(11)。大多數工具都有了,但 EXIF 好像要靠外部工具
匯出匯入。imagemagick 等等似乎無法自動轉過去。(?)
稍微 google 一下,確認 Exiv2 v0.27.4 以上支援 avif。
不過 debian 要 testing 才有 v0.27.5。
我試著用 debian apt source 的方式編譯
apt-get source -t testing -b exiv2
但最後會出現如下錯誤。(我貼在文末)
看相依性應該使用到的程式庫應該可以用 stable 的編譯吧?
用 cmake 照原始套件方式編譯是沒問題的。
這是 debian 套件問題吧??
有辦法解決嗎?
看起來像是 debian/libexiv2-27.symbols 這檔案出問題?
是用到 0.27.3 的資料了嗎?
--------- 以下錯誤訊息 -----------
dpkg-gensymbols: warning: some new symbols appeared in the symbols file: see
diff output below
dpkg-gensymbols: error: some symbols or patterns disappeared in the symbols
file: see diff output below
dpkg-gensymbols: warning: debian/libexiv2-27/DEBIAN/symbols doesn't match
completely debian/libexiv2-27.symbols
--- debian/libexiv2-27.symbols (libexiv2-27_0.27.5-3_amd64)
+++ dpkg-gensymbolst9CV49 2022-06-13 21:21:10.902056781 +0800
@@ -1297,7 +1297,7 @@
(optional=templinst)_ZNSt6vectorIiSaIiEE17_M_realloc_insertIJiEEEvN9__gnu_cxx17__normal_iteratorIPiS1_EEDpOT_@Base
0.27.3
(optional=templinst)_ZNSt6vectorIjSaIjEE17_M_realloc_insertIJRKjEEEvN9__gnu_cxx17__normal_iteratorIPjS1_EEDpOT_@Base
0.27.3
(optional=templinst)_ZNSt6vectorIjSaIjEE17_M_realloc_insertIJjEEEvN9__gnu_cxx17__normal_iteratorIPjS1_EEDpOT_@Base
0.27.3
- _ZNSt6vectorIlSaIlEE12emplace_backIJlEEERlDpOT_@Base 0.27.5
+#MISSING: 0.27.5-3# _ZNSt6vectorIlSaIlEE12emplace_backIJlEEERlDpOT_@Base
0.27.5
_ZNSt6vectorIlSaIlEE17_M_realloc_insertIJlEEEvN9__gnu_cxx17__normal_iteratorIPlS1_EEDpOT_@Base
0.27.5
(optional=templinst|arch=alpha amd64 arm64 ia64 kfreebsd-amd64 mips64el
ppc64 ppc64el riscv64 s390x
sparc64)_ZNSt6vectorImSaImEE17_M_realloc_insertIJRKmEEEvN9__gnu_cxx17__normal_iteratorIPmS1_EEDpOT_@Base
0.27.3
(optional=templinst)_ZNSt6vectorIsSaIsEE17_M_realloc_insertIJRKsEEEvN9__gnu_cxx17__normal_iteratorIPsS1_EEDpOT_@Base
0.27.3
@@ -1316,6 +1316,7 @@
(optional=templinst|subst)_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEE9_M_mutateE{size_t}{size_t}PKc{size_t}@Base
0.27.3
(optional=templinst)_ZNSt7__cxx114listIN5Exiv29ExifdatumESaIS2_EE4sortIPFbRKNS1_9MetadatumES8_EEEvT_@Base
0.25
(optional=templinst)_ZNSt7__cxx114listIN5Exiv29ExifdatumESaIS2_EE5mergeIPFbRKNS1_9MetadatumES8_EEEvOS4_T_@Base
0.27.3
+
_ZNSt7__cxx114listIN5Exiv29ExifdatumESaIS2_EE6insertISt20_List_const_iteratorIS2_EvEESt14_List_iteratorIS2_ES7_T_SA_@Base
0.27.5-3
(optional=templinst)_ZNSt8_Rb_treeINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEES5_St9_IdentityIS5_ESt4lessIS5_ESaIS5_EE16_M_insert_uniqueIRKS5_EESt4pairISt17_Rb_tree_iteratorIS5_EbEOT_@Base
0.27.3
(optional=templinst|arch=!amd64 !arm64 !hppa !ia64 !kfreebsd-amd64
!mips64el !ppc64el !riscv64 !sh4 !sparc64
!x32)_ZNSt8_Rb_treeINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEES5_St9_IdentityIS5_ESt4lessIS5_ESaIS5_EE16_M_insert_uniqueIS5_EESt4pairISt17_Rb_tree_iteratorIS5_EbEOT_@Base
0.27.3
(optional=templinst)_ZNSt8_Rb_treeINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt4pairIKS5_N5Exiv29XmpNsInfoEESt10_Select1stISA_ESt4lessIS5_ESaISA_EE24_M_get_insert_unique_posERS7_@Base
0.25
dh_makeshlibs: error: failing due to earlier errors
make: *** [debian/rules:16:binary] 錯誤 1
dpkg-buildpackage: error: debian/rules binary subprocess returned exit status
2
E: 編譯指令 'cd exiv2-0.27.5 && dpkg-buildpackage -b -uc' 失敗。
--
※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 101.10.13.191 (臺灣)
※ 文章網址: https://webptt.com/m.aspx?n=bbs/Linux/M.1655128610.A.3A7.html
1F:推 Bencrie: 就產出的 library 跟 symbol table 內容有出入吧 06/13 23:42
我程式功力還沒到那裡 XD
為何要預先生成 symbol table 啊?
※ 編輯: sppmg (101.10.13.191 臺灣), 06/14/2022 01:56:08
2F:→ tomsawyer: 應該是你的libexiv2-27也要上testing 06/14 07:10
3F:→ tomsawyer: 我看teating 跟unstable都上27.5了 06/14 07:11
我是從原始碼套件編譯的, libexiv2-27 是編譯完生成的喔!
https://packages.debian.org/source/bookworm/exiv2
記得我有試過直接裝 testing 的 deb,會依賴 testing 的 libc 的樣子。
4F:推 Bencrie: 一個用途是控制符號可見性,gcc 可以吃額外的檔案不用 06/14 08:59
5F:→ Bencrie: 寫在 source code 裡。 06/14 08:59
※ 編輯: sppmg (101.10.13.191 臺灣), 06/14/2022 09:09:28
6F:推 holishing: 最懶的方法就是把 debian/libexiv2-27.symbols 刪掉 06/14 23:34
7F:→ holishing: 重新弄一個空白的檔案就可以編起來了 06/14 23:34
8F:→ holishing: 然後最後如果要更新那個 symbols 的話可以參考: 06/14 23:35
10F:→ holishing: 另外編套件我習慣用 sbuild, 它會每次開一個 chroot 06/14 23:36
11F:→ holishing: 去編跟你現在發行版相容的套件, 編出來的東西會比較 06/14 23:37
12F:→ holishing: 乾淨 06/14 23:37
13F:推 holishing: 八卦是 debian/*.symbols 好像是 Ubuntu 弄出來回饋給 06/14 23:49
14F:→ holishing: Debian 的一套機制 06/14 23:49
感謝(以及八卦 XD)!
後來也有搜尋到 debian 文件,不過一直糾結在 要不要弄成 libfoo
a 這種
形式。(怕影響到原系統其他程式。直接砍 *.symbols 內容也是有點擔心。)
※ 編輯: sppmg (101.10.13.191 臺灣), 06/15/2022 09:16:56