在64位上编译32位应用程序,找不到-lX11


9

我正在调用类似的命令:

g++ ... -o"myapp" -lX11 ...

并得到

/usr/bin/ld: cannot find -lX11

我安装了以下软件包来支持多体系结构:

ia32-libs, libc6-dev-i386 and g++-multilib

但无济于事。/ usr / lib32中似乎没有任何X11.so,实际上该目录中只有52个库。我觉得您应该手动安装库,但是我对接下来应该检查的内容不知所措。

任何帮助表示赞赏。


1
您可以显示命令的输出ldconfig -p | grep libX11\\.吗?
Martin Dirichs 2012年

Answers:


5

您需要-dev包提供的头文件,而不是库包本身的头文件。因此,尝试安装libx11-dev。这应该可以解决此特定的生成错误,尽管您可能会遇到其他库的类似错误(然后可以安装它们的-dev软件包)。

即使这些软件包提供的是头文件而不是二进制文件,并且通常头文件通过使用预处理器宏来说明所有受支持的体系结构,但是-devUbuntu中的软件包往往是特定于体系结构的,这就是这种情况libx11-dev(可以看出)这里通过扩张释放和寻找.deb上市的软件包libx11-dev)在该版本中。由于您的Ubuntu系统是64位的,并且您正在编译一个32位程序,该程序必须链接到库的32位版本,因此您可能需要安装32位版本的libx11-dev。如果您使用apt-get或进行安装aptitude,则可以通过将其指示libx11-dev:i386为要安装的软件包来指定它(因为multarch 支持并正在使用)。

http://packages.ubuntu.com/是查找与-dev库软件包相对应的软件包名称的好资源。并不总是紧随其后的是库软件包的名称-dev。有时版本号存在于库中的包名称,特别是后一个-,是不存在在相应的名称-dev包。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.