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

Fra*_*ank 9 64-bit compiling

我正在调用如下命令:

g++ ... -o"myapp" -lX11 ...
Run Code Online (Sandbox Code Playgroud)

并得到

/usr/bin/ld: cannot find -lX11
Run Code Online (Sandbox Code Playgroud)

我已经安装了以下软件包来支持 multiarch:

ia32-libs, libc6-dev-i386 and g++-multilib
Run Code Online (Sandbox Code Playgroud)

但无济于事。/usr/lib32 中似乎没有任何 X11.so,实际上该目录中只有 52 个库。我的印象是您应该手动安装库,但我不知道接下来应该检查什么。

任何帮助表示赞赏。

Eli*_*gan 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;有时出现在库包名称中的版本号,尤其是在 a 之后-,在相应包的名称中不存在-dev