1

我正在尝试为.deb我的公司(和我)一直在开发的应用程序构建一个包。我正在尝试在我的 32 位 ubuntu(12.04 LTS)上创建一个 64 位包,dpkg-buildpackage但我收到以下警告/错误:

dpkg-shlibdeps: warning/error: couldn't find library X needed by Y.so (ELF format: 'elf64-x86-64'; RPATH: 'some/path/that/does/not/exist')

X是我们编译的共享库之一时,我们会收到警告。当它是一个系统库(比如libgcc_s.so.1and libstdc++.so.6)时,我们会得到一个错误。

为什么RPATH指的是不存在的路径?

顺便说一句,当我制作一个 32 位软件包时(当然是在我们为 32 位编译的文件上)它只显示警告(仅关于我们的专有.so文件)但会创建.deb文件。

如果可以的话,我会发布我的 debian 文件夹内容,但我无法将文件从我们的网络中取出。如果需要,我可以键入相关部分。

4

2 回答 2

1

安装amd64chroot 环境并在其中构建你的包。通过这种方式,您可以避免各种多架构陷阱,并获得干净、可重现的构建的额外好处。

有一个工具可以让这变得非常简单:mk-sbuild.

您需要安装ubuntu-dev-toolssbuild.

然后,运行mk-sbuild --arch=amd64 precise,它将为您设置构建环境。

将自己添加到sbuild组中:adduser <your user name> sbuild

注销并重新登录,以便反映您的组成员身份。

然后,您可以在 chroot 中构建您的包:

 sbuild -d precise --arch=amd64 name_of_package.dsc

这假设您已经使用debuild -S或类似的方式构建了源包。

于 2014-04-27T04:13:16.703 回答
1

您需要使用 apt-get 安装 64 位版本的库(实际上什么都可以,但这是最简单的):

sudo apt-get install libyouneed-dev:amd64

这里的技巧是:amd64,它告诉包管理器安装该包的 64 位版本。这同样适用于 64 位系统中的 32 位库。它被称为多架构。

该软件包正在查看该路径,因为这是存储 64 位(或 32 位)库的位置,但由于您没有安装它,因此该路径不存在。

于 2013-12-17T16:19:53.497 回答