在32位Ubuntu上构建64位Debian软件包

时间:2013-12-17 15:35:38

标签: ubuntu cross-platform debian shared-libraries dpkg

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

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文件夹内容,但我不能从我们的网络中取出文件。如果需要,我可以输入相关部件。

2 个答案:

答案 0 :(得分:1)

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

sudo apt-get install libyouneed-dev:amd64

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

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

答案 1 :(得分: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或类似内容构建了源包。