Nano Hash - криптовалюты, майнинг, программирование

ошибка поиска символа: символ существует, я знаю, где он находится, как мне заставить мой SO увидеть его?

Я пишу подключаемый модуль для более крупной программы, написанной на C++. Я никогда раньше не писал библиотеку SO. Мой модуль компилируется и линкуется правильно (я думаю), однако основная программа, загружающая SO, вылетает с ошибкой symbol lookup error.

Модуль, который я пишу, работал нормально, пока я не начал пробовать использовать в нем другие библиотеки. (конкретно кафе)

  • Есть основная программа, которая разрабатывается другой группой
  • Я пишу модуль плагина для этой программы
  • Мой подключаемый модуль использует функции/код из Caffe (из файла libcaffe.so, сам Caffe представляет собой скомпилированный двоичный файл, чтобы добавить путаницы)
  • Основная программа вылетает со следующей ошибкой

/path-to-binary/binary-name: symbol lookup error: ./build/libTestModule.so: undefined symbol: _ZN5caffe2db5GetDBERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEE

Я попытался добавить export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/usr/lib к своему .bashrc.

Я сделал это, потому что (после некоторого поиска в Интернете - я на самом деле не понимаю, что я здесь делаю) я побежал

nm -g libcaffe.so | grep _ZN5caffe2db5GetDBERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEE

в папке /usr/lib и этот символ существует в libcaffe.so.

00000000001cbb30 T _ZN5caffe2db5GetDBERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEE
  • libcaffe.so находится в /usr/lib и содержит символ, который моя программа не может найти.
  • Насколько я понимаю, (по какой-то неизвестной мне причине) я должен установить LD_LIBRARY_PATH в /usr/lib, чтобы моя программа могла найти libcaffe.co и содержащиеся в нем символы.
  • Однако я бы предположил, что, поскольку /usr/lib содержит множество файлов .so по умолчанию, это будет искаться независимо от того, был ли установлен LD_LIBRARY_PATH, т.е. не следует ли искать этот каталог по умолчанию?
  • Независимо от вышеуказанного вопроса, я не знаю, что мне следует попробовать дальше.
  • Как я могу заставить свою программу найти указанный выше символ в libcaffe.so?

CMakeLists.txt

cmake_minimum_required(VERSION 3.3)
project(TestModule)

find_package(Falaise REQUIRED)

add_library(TestModule SHARED TestModule.h TestModule.cpp)

set(Caffe_INCLUDE_DIRS "/usr/include/caffe")
set(Caffe_LIBRARIES "/usr/lib/libcaffe.so")

target_link_libraries(TestModule PUBLIC Falaise::FalaiseModule)

  • Отредактируйте свой пост, чтобы показать нам команду связывания, которая генерирует ваш плагин .so 02.02.2018
  • @MikeKinghan Это сборка CMake - актуален ли файл CMakeLists.txt? 02.02.2018
  • Да, должно быть достаточно опубликовать CMakeLists.txt 02.02.2018
  • @MikeKinghan Готово 02.02.2018

Ответы:


1

Ваш libTestModule.so, как вы говорите, зависит от libcaffe.so, но вы не связываете его. Этот:

cmake_minimum_required(VERSION 3.3)
project(TestModule)

find_package(Falaise REQUIRED)

add_library(TestModule SHARED TestModule.h TestModule.cpp)

target_link_libraries(TestModule PUBLIC Falaise::FalaiseModule caffe)

как бы вы это сделали.

02.02.2018
Новые материалы

Кластеризация: более глубокий взгляд
Кластеризация — это метод обучения без учителя, в котором мы пытаемся найти группы в наборе данных на основе некоторых известных или неизвестных свойств, которые могут существовать. Независимо от..

Как написать эффективное резюме
Предложения по дизайну и макету, чтобы представить себя профессионально Вам не позвонили на собеседование после того, как вы несколько раз подали заявку на работу своей мечты? У вас может..

Частный метод Python: улучшение инкапсуляции и безопасности
Введение Python — универсальный и мощный язык программирования, известный своей простотой и удобством использования. Одной из ключевых особенностей, отличающих Python от других языков, является..

Как я автоматизирую тестирование с помощью Jest
Шутка для победы, когда дело касается автоматизации тестирования Одной очень важной частью разработки программного обеспечения является автоматизация тестирования, поскольку она создает..

Работа с векторными символическими архитектурами, часть 4 (искусственный интеллект)
Hyperseed: неконтролируемое обучение с векторными символическими архитектурами (arXiv) Автор: Евгений Осипов , Сачин Кахавала , Диланта Хапутантри , Тимал Кемпития , Дасвин Де Сильва ,..

Понимание расстояния Вассерштейна: мощная метрика в машинном обучении
В обширной области машинного обучения часто возникает необходимость сравнивать и измерять различия между распределениями вероятностей. Традиционные метрики расстояния, такие как евклидово..

Обеспечение масштабируемости LLM: облачный анализ с помощью AWS Fargate и Copilot
В динамичной области искусственного интеллекта все большее распространение получают модели больших языков (LLM). Они жизненно важны для различных приложений, таких как интеллектуальные..