Ubuntu 22.04
今天当我发布
sudo apt-get upgrade
Reading package lists... Done
Building dependency tree... Done
Reading state information... Done
You might want to run 'apt --fix-broken install' to correct these.
The following packages have unmet dependencies:
unixodbc : Depends: odbcinst1debian2 (>= 2.3.11) but it is not installed
Depends: libodbc1 (>= 2.3.11) but 2.3.9-5 is installed
unixodbc-dev : Depends: odbcinst1debian2 (= 2.3.11) but it is not installed
E: Unmet dependencies. Try 'apt --fix-broken install' with no packages (or specify a solution).
然后按照建议得到
sudo apt --fix-broken install
Reading package lists... Done
Building dependency tree... Done
Reading state information... Done
Correcting dependencies... Done
The following package was automatically installed and is no longer required:
libodbccr2
Use 'sudo apt autoremove' to remove it.
The following additional packages will be installed:
libodbc1 odbcinst odbcinst1debian2
Suggested packages:
unixodbc-bin
The following NEW packages will be installed:
odbcinst1debian2
The following packages will be upgraded:
libodbc1 odbcinst
2 upgraded, 1 newly installed, 0 to remove and 0 not upgraded.
3 not fully installed or removed.
Need to get 0 B/607 kB of archives.
After this operation, 863 kB of additional disk space will be used.
Do you want to continue? [Y/n] Y
(Reading database ... 725562 files and directories currently installed.)
Preparing to unpack .../odbcinst_2.3.11_amd64.deb ...
Unpacking odbcinst (2.3.11) over (2.3.9-5) ...
dpkg: error processing archive /var/cache/apt/archives/odbcinst_2.3.11_amd64.deb (--unpack):
trying to overwrite '/etc/odbc.ini', which is also in package unixodbc-common 2.3.9-5
Preparing to unpack .../odbcinst1debian2_2.3.11_amd64.deb ...
Unpacking odbcinst1debian2:amd64 (2.3.11) ...
dpkg: error processing archive /var/cache/apt/archives/odbcinst1debian2_2.3.11_amd64.deb (--unpack):
trying to overwrite '/usr/lib/x86_64-linux-gnu/libodbcinst.so.2.0.0', which is also in package libodbcinst2:amd64 2.3.9-5
dpkg-deb: error: paste subprocess was killed by signal (Broken pipe)
Preparing to unpack .../libodbc1_2.3.11_amd64.deb ...
Unpacking libodbc1:amd64 (2.3.11) over (2.3.9-5) ...
dpkg: error processing archive /var/cache/apt/archives/libodbc1_2.3.11_amd64.deb (--unpack):
trying to overwrite '/usr/lib/x86_64-linux-gnu/libodbc.so.2.0.0', which is also in package libodbc2:amd64 2.3.9-5
dpkg-deb: error: paste subprocess was killed by signal (Broken pipe)
Errors were encountered while processing:
/var/cache/apt/archives/odbcinst_2.3.11_amd64.deb
/var/cache/apt/archives/odbcinst1debian2_2.3.11_amd64.deb
/var/cache/apt/archives/libodbc1_2.3.11_amd64.deb
E: Sub-process /usr/bin/dpkg returned an error code (1)
怎样才能走出这个坑?
我不介意清除任何软件包来解决这个问题。这正是阻碍 Linux 大规模采用的极端情况。我的直觉告诉我,要低调行事,直到有问题的软件包所有者将他们的修复程序推送到上游。
我尝试过很多猜测,包括...但都无济于事...有什么建议吗?
sudo apt-get autoremove
Reading package lists... Done
Building dependency tree... Done
Reading state information... Done
You might want to run 'apt --fix-broken install' to correct these.
The following packages have unmet dependencies:
unixodbc : Depends: odbcinst1debian2 (>= 2.3.11) but it is not installed
Depends: libodbc1 (>= 2.3.11) but 2.3.9-5 is installed
unixodbc-dev : Depends: odbcinst1debian2 (= 2.3.11) but it is not installed
E: Unmet dependencies. Try 'apt --fix-broken install' with no packages (or specify a solution).
答案1
这些命令允许我删除有问题的软件包
之前下一个命令失败了,现在正在运行
dpkg --remove unixodbc-dev
(Reading database ... 725562 files and directories currently installed.)
Removing unixodbc-dev (2.3.11) ...
apt-get install -f
Reading package lists... Done
Building dependency tree... Done
Reading state information... Done
Correcting dependencies... Done
The following package was automatically installed and is no longer required:
odbcinst
Use 'apt autoremove' to remove it.
The following packages will be REMOVED:
msodbcsql17 mssql-tools unixodbc
0 upgraded, 0 newly installed, 3 to remove and 0 not upgraded.
1 not fully installed or removed.
After this operation, 114 kB disk space will be freed.
Do you want to continue? [Y/n]
(Reading database ... 725539 files and directories currently installed.)
Removing mssql-tools (17.10.1.1-1) ...
Removing msodbcsql17 (17.10.2.1-1) ...
ODBC Driver 17 for SQL Server has been deleted (if it existed at all) because its usage count became zero
Removing unixodbc (2.3.11) ...
Processing triggers for man-db (2.10.2-1) ...
sudo apt-get autoremove -yq
sudo apt-get --fix-broken install -y
sudo dpkg -P libodbc2:amd64
dpkg: dependency problems prevent removal of libodbc2:amd64:
libodbccr2:amd64 depends on libodbc2 (= 2.3.9-5).
libodbc1:amd64 depends on libodbc2 (= 2.3.9-5).
libgdal30 depends on libodbc2 (>= 2.3.1).
dpkg: error processing package libodbc2:amd64 (--purge):
dependency problems - not removing
Errors were encountered while processing:
libodbc2:amd64
sudo dpkg -P libgdal30
dpkg: dependency problems prevent removal of libgdal30:
libopencv-imgcodecs4.5d:amd64 depends on libgdal30 (>= 2.0.1).
dpkg: error processing package libgdal30 (--purge):
dependency problems - not removing
Errors were encountered while processing:
libgdal30
sudo apt-get purge libopencv-*
sudo apt-get purge libodbc1
答案2
您的输出表明您有两个包,libodbc1
并且libodbc2
它们试图提供同一个文件 ( libodbc.so.2.0.0
)。这很糟糕。
换句话说,这两个方案是不相容。只能安装其中一个而不强制安装(--force-overwrite
)。只有经验丰富的用户(如您)才应该冒险强制安装,并在某处记录您这样做的情况 - 卸载 A 可能需要重新安装 B。
缺乏经验的用户不应尝试使用 deb 包安装两者。最好从源代码安装一个,或使用不同的包系统。