使用BUCK构建的CPP应用程序链接X11

时间:2019-03-10 16:30:23

标签: c++ x11 buck

在尝试使用buck编译依赖于X11的CPP应用程序时遇到问题,因为它似乎没有链接X11 Lib并导致未定义的引用错误:

 undefined reference to `XOpenDisplay'
collect2: error: ld returned 1 exit status

研究完错误后,我尝试修改 BUCK文件以提供正确的标志,并尝试了几种不同的格式:

  platform_linker_flags = [
   # ('^linux.*', ['-lX11','-L/usr/X11/lib','-I/opt/X11/include'])
    ('^linux.*', []),
    ('^linux.*', ['-lX11']),
    ('^linux.*', ['-L/usr/X11/lib']),
  ],

我尝试了如上所示更改结构等,以查看它在链接过程中是否有所不同,但是仍然无法解决XOpenDisplay所需的依赖项。

任何人都可以解释或引用将系统库应用于buck项目的正确方法,或者暗示该版本中可能出了什么问题。

1 个答案:

答案 0 :(得分:1)

尝试为系统库创建一个“虚拟”目标:

prebuilt_cxx_library(
  name = 'x11', 
  header_only = True,
  exported_platform_linker_flags = [
    ('linux.*', [ '-lX11' ]),
  ],
)

cxx_library(
  name = 'foo',
  srcs = glob([
    '**/*.cpp',
  ]),
  deps = [
    ':x11',
  ],
)

这是Buckaroo

使用的方法

这里对此进行了一些讨论:https://github.com/facebook/buck/issues/1443