使用 X11 (c++) 为 lib 链接目标失败

Posted

技术标签:

【中文标题】使用 X11 (c++) 为 lib 链接目标失败【英文标题】:Linking target failed for lib with X11 (c++) 【发布时间】:2021-04-01 14:37:28 【问题描述】:

我正在将 CMake C++ 项目转换为介子。剩下的一件事可以正常运行。 我在我的项目 lib 中使用了一个 X11 库。

使用 CMake,项目链接可以正常工作:

...

target_link_libraries(hamster ui util $GTKMM_LIBRARIES $X11_LIBRARIES -lX11 -lXtst -lXext)

如何在介子项目中添加-lX11 -lXtst -lXext 标志?我尝试了一些解决方案,例如link_args,但没有帮助。我收到:

ninja: Entering directory `build'
[17/19] Linking target src/ui_lib/libui.so.
FAILED: src/ui_lib/libui.so

/home/repos/project/build/../src/ui_lib/ui/window/WindowBody.cpp:583: undefined reference to `XTestGrabControl'


【问题讨论】:

【参考方案1】:

正确答案如下:

gtkmm_dep = dependency('gtkmm-3.0')
x11_dep = dependency('x11')
xtst_dep = dependency('xtst')
xext_dep = dependency('xext')

ui = library('ui', dependencies : [gtkmm_dep, x11_dep, xtst_dep, xext_dep, util_dep],
    sources : [
        'ui/window/WindowBody.h', 'ui/window/WindowBody.cpp',
    ]
)

ui_dep = declare_dependency(
    include_directories : include_directories('.'),
    link_with : ui
)


【讨论】:

以上是关于使用 X11 (c++) 为 lib 链接目标失败的主要内容,如果未能解决你的问题,请参考以下文章

是否可以用 C++ 为 X11 Xlib 编程而不是使用 C?

Borland C++ builder 6 链接器错误

为什么.o(目标文件)链接速度比.lib(静态库)快?

c++ X11全局改变光标形状

X11。未找到符号:_CGLGetCurrentContext

MongoDB 和 Visual C++ 2008 链接器错误