.so文件,没有这样的文件或目录,C++。

问题描述 投票:0回答:1

我正在从一个exmaple项目中构建一个项目。我创建了一个 "HelloWorld "项目,只是为了测试.h包括和.so库。我对.h文件有一些问题,因为我是一个完全的C++初学者,我正在从一个示例项目中提取元素来构建我自己的项目。我在运行windows示例时没有任何问题。我已经让这个运行并修改了它。我目前使用一个运行Debian 9的BeagleBone AI板作为远程服务器进行linux调试。我在Visual Studio中的.h文件中添加了Include目录,这些文件被识别,我在Visual Studio中的linker设置中添加了.so文件,但在构建它时没有收到这样的文件或目录错误。我已经检查了BeagleBone的项目文件夹,以确保文件存在,它确实存在。

我不明白为什么它在那里的时候,程序却没有看到它。我有几个问题想得到一些答案。请记住,我是C++新手,而且是边走边学。

  1. Linux是否需要安装任何东西来使用.so文件,或者共享对象文件应该只是在linux上工作而不需要任何其他的依赖?

下面是项目和设置,如果有人有什么建议,那将会很感激。我已经使用了图像,因为还没有真正的代码,只是想在我继续前进之前让共享对象文件被看到。

文件系统enter image description here

程序所看到的内含文件enter image description here

找不到共享对象文件enter image description here

Visual Studio设置enter image description hereenter image description hereenter image description hereenter image description here

从构建项目看Linux文件系统enter image description hereenter image description hereenter image description here

把picozense_api转到库依赖后,文件没有重新标识。enter image description here

c++ linux linker dependencies .so
1个回答
0
投票

我假设链接器找不到的共享库是......。libpicozense_api.so.

移除 libpicozense_api.so 来自 链接器 -> 输入 -> 额外的依赖性设置,而是在 链接器 -> 输入 -> 图书馆的依赖性 设置输入 picozense_api. 不 libpicozense_api.so.

这些设置为GCC连接命令生成库选项。一个库选项的形式是 -lname. 它引导链接器进行搜索,首先在指定的链接器搜索目录(-Ldir),然后在链接器的默认搜索目录中,对其中的任何一个文件 libname.so (共享图书馆)或 libname.a (静态库),并且更喜欢 libname.so 如果两个文件都在同一个搜索目录下找到。IDE希望你知道链接器 -> 输入 -> 图书馆的依赖性 是指定一个以分号分隔的列表的地方。name应通过作为 -lname连接命令中的选项。1

一个无限制的文件名,如 libpicozense_api.so,具体如下链接器 -> 输入 -> 额外的依赖性 将会简单地将该文件名添加到链接命令中,然后只有在命令执行的目录中存在该名称的文件时才会被找到,而这是不存在的。


[1]通过IDE媒介操作GCC工具链,如果你对工具链本身的工作原理没有基础,就会充满了这样的疑惑。GCC简介
© www.soinside.com 2019 - 2024. All rights reserved.