.so файл, такого файла или каталога нет, C ++ - PullRequest
0 голосов
/ 07 мая 2020

Я создаю проект на основе exmaple проекта. Я создал проект «HelloWorld», чтобы протестировать библиотеки .h и .so. У меня были проблемы с файлами .h, так как я новичок в C ++ и беру элементы примерного проекта для создания своего собственного. У меня нет проблем с запуском примера windows. Я запустил это и изменил его. В настоящее время я использую плату BeagleBone AI под управлением Debian 9 в качестве удаленного сервера для отладки linux. Я добавил каталог Include к файлам .h в Visual Studio, и они распознаются, я добавил файл .so в настройки компоновщика в Visual Studio, но при его создании я не получаю такой ошибки файла или каталога. Я проверил папку проекта на BeagleBone, чтобы убедиться, что файл существует, и он существует.

Я не могу понять, почему программа не видит его, когда он есть. У меня есть несколько вопросов, чтобы попытаться получить на них ответы. Имейте в виду, что я новичок в C ++ и учусь, как я go.

  1. Требуется ли Linux что-нибудь установленное для использования файлов .so или общие объектные файлы должны работать на linux без каких-либо других зависимостей?

Ниже представлен проект и настройки, если у кого-то есть предложения, мы будем признательны. Я использовал изображения, так как в них пока нет реального кода, просто пытаюсь увидеть файл общих объектов до того, как я go продолжу.

Файловая система enter image description here

Включенные файлы, которые программа видит enter image description here

Файл общих объектов, который не найден enter image description here

Настройки Visual Studio enter image description here enter image description here enter image description here enter image description here

Linux Файл Система из проекта сборки enter image description here enter image description here enter image description here

Файл не записан после переноса picozense_api в зависимости от библиотеки: enter image description here

1 Ответ

0 голосов
/ 07 мая 2020

Я предполагаю, что разделяемая библиотека, которую не может найти компоновщик, - это libpicozense_api.so.

Удалить libpicozense_api.so из компоновщика -> Вход -> Дополнительные зависимости настройки и вместо этого в Linker -> Input -> Library Dependencies settings введите picozense_api. Не libpicozense_api.so.

Эти параметры создают параметры библиотеки для команды связывания G CC. Вариант библиотеки имеет вид -lname. Он направляет компоновщик на поиск сначала в указанных каталогах поиска компоновщика (-Ldir), а затем в каталогах поиска компоновщика по умолчанию для любого из файлов libname.so (общая библиотека) или libname.a (состояние c library) и предпочитать libname.so, если оба файла находятся в одном каталоге поиска. IDE ожидает, что вы будете знать, что Linker -> Input -> Library Dependencies - это то место, где нужно указать разделенный точкой с запятой список name s, который должно быть передано как параметры -lname в команде связывания. 1

Неквалифицированное имя файла, например libpicozense_api.so, указанное в Linker -> Input -> Дополнительные зависимости просто добавит именно это имя файла к команде связывания, и тогда он будет найден только в том случае, если в каталоге, где выполняется команда, есть файл с таким именем, которого нет 't.


[1] Работа с набором инструментов G CC через среду IDE чревата подобными ошибками, если у вас нет знаний о том, как работает сама инструментальная цепочка. Если у вас нет такого заземления, вы можете получить его из Введение в G CC
...