【问题标题】:Running x11 on Mac OS在 Mac OS 上运行 x11
【发布时间】:2017-05-22 23:52:01
【问题描述】:

我已经正确安装了XQuarts.app,但是有链接阶段的问题。
这是简单的代码。

#include <X11/Xlib.h>
#include <X11/Xutil.h>
#include <X11/Xresource.h>

int main() {
    Display* dis = XOpenDisplay(NULL);
    return 0;
}

当我像这样从 XQuartz.app 编译它时

g++ -c main.cpp -I/opt/X11/include

但是它输出:

架构 x86_64 的未定义符号: “_XOpenDisplay”,引用自: main.o 中的 _main ld:未找到架构 x86_64 的符号 clang:错误:链接器命令失败,退出代码为 1(使用 -v 查看调用) make: *** [默认] 错误 1

我的mac版本:

优胜美地 10.10.2

我搜索了很多,但找不到任何有用的帮助。提前致谢。

【问题讨论】:

  • /include 用于编译,而不是链接。您会在那里找到 .h 文件,而不是库。

标签: c++ x11


【解决方案1】:

您没有链接到 libX11。将以下标志添加到链接器命令:

-L/opt/X11/lib -lX11

不重要,但值得注意:您不需要使用 xterm(XQuartz 中的终端)来构建或运行 X11 应用程序。

【讨论】:

  • 它有效。您能否详细说明“为什么”这样有效?这将非常有帮助。
  • XOpenDisplay 函数是 libX11 的一部分。如果您不链接到该库,则链接器无处可获取该函数。
  • 为什么#include &lt;X11/Xlib.h&gt;这行代码不自动诱导编译器链接这个库?
  • 因为编译器不是这样工作的。 #include 向预处理器发出指令;链接器标志在更晚的阶段使用。
  • @duskwuff 值得一提的是,MSVC 提供了一个#pragma lib,它将库名称嵌入到编译的目标文件中,然后将其添加到链接器命令行上指定的库中。虽然就个人而言,我通常发现这更像是一个错误而不是一个功能......
猜你喜欢
  • 1970-01-01
  • 2019-05-05
  • 1970-01-01
  • 1970-01-01
  • 2020-10-29
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-11-18
相关资源
最近更新 更多