基本上,我下载了一个用于C / C ++的SDK,我有几个.so和.a文件。 SDK没有安装脚本。它只包含头文件以及.so和.a文件。我真的不知道把这些文件放在哪里。
通常情况下,如果我下载了一些SDK,则会有一个安装脚本为我执行此操作。我没有必须手动执行此操作。我在哪里放这些文件?
答案 0 :(得分:1)
在Unix和Linux中,通常会遵循以下约定来使用 目录提到: -
/ usr: - 内容不是系统关键的
/usr/bin
- 供应商/发行版或安装的可执行文件的根路径
vendor / distro的包管理器
/usr/lib
- 供应商/发行版或安装的库的根路径
vendor / distro的包管理器
/usr/include
- 供应商/发行版或安装的头文件的根路径
vendor / distro的包管理器
/usr/local/bin
- 系统用户安装的可执行文件的根路径
root privelege(你),但没有与vendor / distro的包管理器
/usr/local/lib
- 由您安装的库的根路径,但不是
vendor / distro的包管理器
/usr/local/include
- 由您安装的头文件的根路径,但不是
vendor / distro的包管理器
为了系统的稳定性,安装或删除文件非常重要
仅在usr/{bin|lib|include}
中使用vendor / distro的包管理器,
您可以信任以了解包的相互依赖性(按版本)
而不是弄乱系统。
另一方面,包管理器将不安装usr/local
下面的文件
和你可以这样做,有root privelege。所以usr/local/{bin|lib|include}
是
适合安装可执行文件| libaries |头文件的地方
为您的包裹经理寻找或获得现成但未包装。
这些位置特别适合安装用于构建C或C ++软件的文件,因为: -
usr/local/bin
是可执行文件的默认搜索路径。
usr/local/include
是头文件的默认编译器搜索路径,所以
如果您的代码包含,例如
#include <foo/bar.h>
并且您已经安装了usr/local/include/foo/bar.h
,那么您没有安装-I
需要传递编译器任何usr/local/lib
选项以让它找到该标题。
libfoo.a
是库的默认链接器搜索路径,所以
如果你的程序需要链接,例如与usr/local/lib/libfoo.a
并且你有
已安装-L
,然后您没有
需要传递链接器任何-lfoo
选项,让它找到该库:
libfoo.so
就足够了。
但是,如果您放置共享库,例如usr/local/lib
中的ldconfig /usr/local/lib
(或者就任何地方而言),运行时加载器将无法找到
除非您先刷新其共享库缓存,否则它在运行时。您
需要运行:
checked
在那里放置任何新的共享库之后。
不要忘记您安装的任何二进制文件,无法访问源代码, 不会打包在您的供应商/发行版的官方存储库中 包含恶意软件的可能性很高。
答案 1 :(得分:0)
实际上并不重要 - 无论如何,您必须将lib路径传递给编译器。如果你将它们放在应用程序主目录中(源代码在哪里以及你在哪里运行),你就不必放置完整的路径。否则你只会放置绝对路径或相对路径。