C ++ динамические и статические библиотеки, связанные с CMake

Мне нужна помощь с компиляцией C ++, так как я явно что-то упускаю.

Я создал библиотеку .so (назовем ее mylib) в зависимости от другой библиотеки .so, которую я написал (mylib2) и какой-то простой программы, использующей ее. Также вторая библиотека зависит от ANTLR. я использую CMake для сборки обеих библиотек, и они прекрасно компилируются и устанавливаются. Но когда я пытаюсь скомпилировать программу:

cmd> g++ program.cpp -lmylib

я получил

/usr/local/lib/libmylib2.so.0: undefined reference to `antlr::CharScanner::traceOut(char const*)'

ANTLR выглядит как статическая библиотека, поэтому я попытался

cmd> g++ program.cpp -lmylib -Wl,-Bstatic -lantlr

Но тогда все, что я получаю, это

/usr/bin/ld: cannot find -lgcc_s

У меня есть два вопроса здесь:

1) Почему mylib2 не видит antlr? Я должен упомянуть, что я использую свой собственный скрипт cmake find, это может быть проблемой?

find_package(ANTLR REQUIRED)
include_directories(${ANTLR_INCLUDE_DIR})

2) Что означает вторая ошибка? Почему я не могу найти libgcc_s?

Я буду очень признателен за любую помощь.

РЕДАКТИРОВАТЬ

Я должен отметить, что я использую ANTLR 2.7

0

Решение

От man ld (GNU ld): -Bstatic — Не связывайтесь с общими библиотеками. Вы можете использовать эту опцию несколько раз в командной строке: она влияет на поиск в библиотеке параметров -l, которые следуют за ней. Поэтому вы должны вручную включить использование динамических библиотек после -lantlr, Пожалуйста, помните, что связывание статической библиотеки не компилируется с -fPIC опция может привести к не перемещаемому коду и более длительному времени запуска приложения http://www.airs.com/blog/archives/41

1

Другие решения

Других решений пока нет …