Ошибка G ++ с флагом -lxnt после установки xlnt - PullRequest
0 голосов
/ 15 мая 2019

Я пытаюсь установить библиотеку xlnt в Ubuntu 18. Я установил xlnt именно так, как говорят инструкции в репозитории. Когда я пытаюсь скомпилировать мой код, появляется следующая ошибка:

/usr/bin/ld: cannot find -lxlnt
collect2: error: ld returned 1 exit status
makefile:204: recipe for target 'BOF-debug-static' failed
make: *** [BOF-debug-static] Error 1

Я устанавливал другие библиотеки, чтобы код работал, и я заметил, что другие библиотеки создают файлы .a в / usr / local / lib вместе с несколькими другими файлами .la и .so. Когда я устанавливаю xlnt, он не создает никаких файлов .a, но создает файлы .so и .so.1.2. Не уверен, что это актуально, но я кое-что заметил.

Как сделать xlnt доступным для обнаружения в g ++ и заставить работать флаг -lxlnt?

1 Ответ

0 голосов
/ 15 мая 2019

Цель, которую вы строите BOF-debug-static, очевидно, требует либо полностью статическая связь с опцией -static, либо, возможно, такая, которая запрашивает статическое связывание, в частности, libxlnt, с опцией связывания, такой как:

-Wl,-Bstatic -lxlnt -Wl,-Bdynamic

Поскольку, как вы заметили, libxlnt по умолчанию предоставляет только разделяемую / динамическую библиотеку libzlint.so (-> libzlint.so.X.Y.Z), и без статической библиотеки libzlnt.a, компоновщик игнорирует общую библиотеку, когда требуется статически связать -lxlnt и говорит:

/usr/bin/ld: cannot find -lxlnt

Вы не можете связать совместно используемую библиотеку статически.

Однако, если вы конфигурируете систему сборки CMake с:

cmake -DSTATIC=ON [your previous options...]

затем make создаст статическую библиотеку, а при запуске make install (с правами root) будет создан /usr/local/lib/libxlnt.a.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...