Статические либы, Linux, Cmake

Telegram dou#techПідписуйтеся на Telegram-канал «DOU #tech», щоб не пропустити нові технічні статті.

Господа линуксоиды подскажите.

Есть такой большой продукт Kaldi. Я его собираю по инструкции и он работает.
Но мне нужно заюзать либы из него. Во время сборки он создает статические либы:
KALDI_LIBRARIES: /home/viktor/Work/kaldi/src/decoder/kaldi-decoder.a;/home/viktor/Work/kaldi/src/feat/kaldi-feat.a;/home/viktor/Work/kaldi/src/gmm/kaldi-gmm.a;/home/viktor/Work/kaldi/src/hmm/kaldi-hmm.a;/home/viktor/Work/kaldi/src/lat/kaldi-lat.a;/home/viktor/Work/kaldi/src/matrix/kaldi-matrix.a;/home/viktor/Work/kaldi/src/transform/kaldi-transform.a;/home/viktor/Work/kaldi/src/tree/kaldi-tree.a;/home/viktor/Work/kaldi/src/util/kaldi-util.a;/home/viktor/Work/kaldi/src/base/kaldi-base.a

В cmakelist.txt делаю следующее:
add_executable(${NAME} ${${NAME}_SRCS})
target_link_libraries(${NAME} ${Boost_LIBRARIES} ${KALDI_LIBRARIES} ${OPENFST_LIBRARY} ${BLAS_LIBRARIES})

Но при сборке проекта ловлю следующую проблему:
/home/viktor/Work/kaldi/src/tree/kaldi-tree.a(build-tree.o): In function `kaldi::GenRandStats(int, int, int, int, std::vector<int, std::allocator<int=""> > const&, std::vector<int, std::allocator<int=""> > const&, std::vector<bool, std::allocator<bool=""> > const&, bool, std::vector<std::pair<std::vector<std::pair<int, int="">, std::allocator<std::pair<int, int=""> > >, kaldi::Clusterable*>, std::allocator<std::pair<std::vector<std::pair<int, int="">, std::allocator<std::pair<int, int=""> > >, kaldi::Clusterable*> > >*)’:
/home/viktor/Work/kaldi/src/tree/build-tree.cc:103: undefined reference to `kaldi::VectorBase<float>::Sum() const’
/home/viktor/Work/kaldi/src/tree/build-tree.cc:104: undefined reference to `kaldi::VectorBase<float>::Sum() const’
и т.д.

QtCreator пишет дополнительно пишет: File not found /home/viktor/Work/kaldi/src/tree/kaldi-tree.a(build_tree.o).

То бишь не находит нужных функций в подключаемых либах или их таки не прилинковывает.

Ключи для сборки:
SET (CMAKE_C_FLAGS “-std=c++11 -Wall -Wextra”)
SET (CMAKE_CXX_FLAGS “${CMAKE_C_FLAGS}”)

Возможно нужно еще какие ключи добавить?
Или куда копать подскажите?

👍ПодобаєтьсяСподобалось0
До обраногоВ обраному0
LinkedIn
Дозволені теги: blockquote, a, pre, code, ul, ol, li, b, i, del.
Ctrl + Enter
Дозволені теги: blockquote, a, pre, code, ul, ol, li, b, i, del.
Ctrl + Enter

Нужна помощь нубо-ебунту. Как я его ненавижу... Проблема:
WinSCP. Одно окошечкО на виндовском компе, второе на сервере под ебунту (обычный файловый редактор). Когда меняю файл на винде и перетаскиваю левой кнопочкой мышички на сервер, оно не запускаетсо, бо «:No such file in directory». Как там совместимость настроить? А то приходится открывать на сервере какой то рабочий файл блокнотиком и туда втупую копировать код из файла которого якобы нет....

Не чмод стоит на запускание ls файл видит зелененьким и запуск идет через точку и палочкой, но при запуске «нет файла». Може винда что то там допиливает к файлу и как убрать хз. Чувствую себя идиотом... Минт не ставится на виртуалку хз почему, у других стоит минт — никаких проблем с совместимостью потяно шо нету :(

Ты кстати не екзешник виндовый путаешься запускать?
не, обычный скрипт *.R
Ну лано, спасибо, ставить минт буду на бокс :(

blah.R: /usr/bin/R^M: No such file or directory

Убирается через dos2unix, а лучше настройкой редактора.

Спасибо !! В тупую надо было передачу «текстовую» сделать, а не по «умолчанию». Тупое у редактора «умолчание» ...

Пробовали ключи start-group, end-group?

Как посмотреть, какой линкер используется?

ld -V
Только там будет или GNU ld, или маловероятно GNU gold.

Можно попробовать группу из этих kaldi сделать, -( -)
Ниже по ссылке на SO есть.

Спробуй перед ключами додати рядок:

SET(CMAKE_EXE_LINKER_FLAGS «-static»)

Проблема скорее всего в linking order.

stackoverflow.com/...times-cause-errors-in-gcc

Наверное стоит прописать зависимости между статическими либами Kaldi (через target_link_libraries).

Підписатись на коментарі