Ссылка X11 с использованием сборки BUCK для приложения CPP - PullRequest
1 голос
/ 10 марта 2019

У меня возникли проблемы при попытке скомпилировать приложение CPP с зависимостью от X11, используя бак, так как, по-видимому, он не связывает Lib X11 и приводит к неопределенной ошибке ссылки:

 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.

Может ли кто-нибудь объяснить или сослаться на правильный способ применения системных библиотек к проекту баксов или сослаться на то, что может быть не так в этой сборке.

1 Ответ

1 голос
/ 20 марта 2019

Попробуйте создать «фиктивную» цель для системной библиотеки:

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

...