c -/usr/local/lib 中的子文件夹?

标签 c cmake shared-libraries

我正在使用 Cmake 为我的大学开发一个简单的 C 共享库。 目前我正在开发我的 *.so 和我的 .*h 文件的安装过程。

当用户运行著名的 sudo make install 时,我应该把 so 和头文件放在哪里? 据我了解:

  1. 我不应该将它们放在 /usr/lib/usr/include 中,因为这些文件夹是为分发包保留的;
  2. 我不应该将它们放在 /lib/include 中,因为这些文件夹是为操作系统启动包保留的;

剩下的就是 usr/local/lib/usr/local/include。但是我无法决定是否应该将我的文件放在子文件夹中:

  1. 将文件直接放在 usr/local/lib/usr/local/include 中将使它们直接在系统中可用,但它们将保持杂乱无章的状态文件夹中的其他文件。更令人不安的事实是,如果有人安装了另一个共享库,其 header 与我的名称相同,可能会发生未知行为;
  2. 将文件放在子文件夹中(/usr/local/lib/myAwesomeProject//usr/local/include/myAwesomeProject)将避免上述行为,但是将阻止系统自动检测我的库(根据我的理解,系统仅在特定目录中自动查找包含和库非递归):所以如果系统查看 /usr/local/include,我的include会因为子文件夹找不到!

为了帮助你,这是我的系统:

  • 操作系统:Ubuntu 16.4(64 位在 Windows 10 64 位上虚拟化);
  • CPU(不是我认为有用的):Intel® Core™ i5-3230M CPU @ 2.60GHz × 2;

感谢您的回复!

最佳答案

  1. 库和 header 位置的方法可能不同:您应该将库直接放入/usr/local/lib(否则链接器将无法找到它们)但可能将 headers 放在 /usr/local/include 的子文件夹下(这样它们就不会与其他库的头文件混合)。
  2. 问题本身是基于意见的,因为关于安装位置没有通用规则。作为一种简单但广泛使用的方法,您可以使用来自 GNUInstallDirs 的安装目录。 CMake 模块。

–齐瓦列夫

关于c -/usr/local/lib 中的子文件夹?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41360283/

相关文章:

c - Lua 5.2 : Bindings andNative Extensions: lua_register() causes segfaults due to lack of LUA_GLOBALSINDEX

c - 需要 InvenSenses 运动驱动程序的解释

c++ - 使用 CMAKE 编译 CUDA C++ - 指定了多个编译阶段

linux - 如何手动修复 ld-linux.so.2 错误

c++ - 如何避免在 CMake 安装步骤中删除 RPATH?

android - 如何在android中延迟加载共享库

c - 获取线();在C中不要停止输入

c++ - 如何将数组从c++传递到python函数并将python返回的数组检索到c++

visual-studio-2013 - 错误 MSB4025 : The project file could not be loaded. 找不到文件(项目文件名).metaproj

python - gdb:中断由python加载的共享库