![在 64 位上编译 32 位应用程序,找不到 -lX11](https://linux22.com/image/823029/%E5%9C%A8%2064%20%E4%BD%8D%E4%B8%8A%E7%BC%96%E8%AF%91%2032%20%E4%BD%8D%E5%BA%94%E7%94%A8%E7%A8%8B%E5%BA%8F%EF%BC%8C%E6%89%BE%E4%B8%8D%E5%88%B0%20-lX11.png)
我正在调用如下命令:
g++ ... -o"myapp" -lX11 ...
并且得到
/usr/bin/ld: cannot find -lX11
我已经安装了以下软件包来支持多架构:
ia32-libs, libc6-dev-i386 and g++-multilib
但无济于事。/usr/lib32 中似乎没有任何 X11.so,实际上该目录中只有 52 个库。我的印象是您应该手动安装库,但我不知道下一步应该检查什么。
任何帮助均感激不尽。
答案1
您需要头文件,这些头文件由软件包提供-dev
,而不是库软件包本身。因此,请尝试安装libx11-dev
。这应该可以修复此特定构建错误,尽管您可能会收到有关其他库的类似错误(然后您可以安装它们的-dev
软件包)。
尽管这些软件包提供的是头文件而不是二进制文件,并且通常头文件通过使用预处理器宏来解释所有支持的体系结构,但-dev
Ubuntu 中的软件包往往是特定于体系结构的,这就是这种情况libx11-dev
(如上所示这里通过展开版本并找到该版本中.deb
列出的软件包libx11-dev
)。由于您的 Ubuntu 系统是 64 位的,而您正在编译一个必须链接到 32 位版本的库的 32 位程序,因此您可能需要安装 32 位版本的libx11-dev
。如果您使用apt-get
或进行安装,您可以通过指示要安装的软件包来aptitude
指定它(因为libx11-dev:i386
多主得到支持并正在使用)。
http://packages.ubuntu.com/是查找-dev
与库包对应的包名称的一个很好的资源。库包名称后面并不总是紧跟-dev
;有时库包名称中存在的版本号(尤其是在 之后-
)是缺席的在相应包的名称中-dev
。