我正在尝试为我的公司(和我)开发的应用程序构建一个.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.1
和libstdc++.so.6
)时,我们会收到错误。
为什么RPATH
引用了不存在的路径?
顺便说一下,当我制作32位软件包时(我们的文件当然是为32位编译的)它只显示警告(仅关于我们的专有.so
文件)但是创建了.deb
文件
如果可以的话,我会发布我的debian文件夹内容,但我不能从我们的网络中取出文件。如果需要,我可以输入相关部件。
答案 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-tools
和sbuild
。
然后,运行mk-sbuild --arch=amd64 precise
,这将为您设置构建环境。
将自己添加到sbuild
群组:adduser <your user name> sbuild
退出并重新登录,以便反映您的群组成员资格。
然后,您可以在chroot中构建您的包:
sbuild -d precise --arch=amd64 name_of_package.dsc
这假设您已经使用debuild -S
或类似内容构建了源包。