2013-12-17 67 views
1

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

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.1libstdc++.so.6)时,我们会收到错误消息。为什么RPATH引用不存在的路径?顺便说一句,当我制作一个32位软件包(当然我们的文件是为32位编译的),它只显示警告(仅限于我们专有的.so文件),但创建了.deb文件。

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

回答

1

您需要安装与图书馆的64位的apt-get(实际上什么做的,但是这是最容易):

sudo apt-get install libyouneed-dev:amd64 

这里的窍门是:amd64,它告诉软件包管理器来安装该软件包的64位版本。这同样适用于64位系统中的32位库。这就是所谓的多元化。

程序包正在查看该路径,因为这是存储64位(或32位)库的位置,但由于没有安装路径,所以路径不存在。

+0

好的,我安装了'lib64stdC++ 6',它解决了大部分问题,但它仍然找不到'libpython2.7.so.1.0'(RPATH:'')。任何想法如何解决它? –

+0

为什么我会对我们的专有共享库产生如此多的警告(看起来像RPATH显示了错误的路径 - 编译的路径,而不是分发版)? –

+0

'libpython2.7'有它。 – Braiam

1

安装一个amd64 chroot环境并在那里构建你的包。通过这种方法,您可以避免各种多拱形陷阱,并且具有干净,可重现的构建的额外好处。

有一个工具可以使这非常简单: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或类似构建源包。