C库开发的虚拟环境

时间:2015-12-02 23:31:56

标签: c linux shared-libraries development-environment

原始

我正在寻找一种为C库创建非隔离开发环境的方法。

我很可能会使用cmake来构建库,而我的IDE是一个简单的文本编辑器。

现在的问题是我不仅使用库创建库而且还创建了一些示例“应用程序”。 因此,我需要在某处安装库的头文件和共享对象(我使用的是GNU / Linux),我不想将它安装到/usr/local/lib或(更糟糕的)/usr/lib

有没有办法创建一个类似于python的pyvenv(和类似的)的虚拟环境,我可以安装所有东西,但仍然可以访问主机库?

我也想要重写我的$PATH / $LD_LIBRARY_PATH,设置VM,容器或chroot。

用法如下:

# switch to environment somehow
loadenv library1

# for library
cd library
make && make install

# for application
cd ../application1
make && ./application1

这可能吗?

编辑1

基本上我的目录结构如下所示:

library/
library/src/
library/src/<files>.c
library/include/<files>.h
application/
application/src/
application/src/<files>.c

首先,我需要编译库并安装二进制文件和头文件。 这些应安装在虚假的系统位置。

然后我可以编译应用程序并运行它。

编辑2

我想了一下它,似乎我只需要一个文件系统沙箱。 所以基本上我想打开一个shell,每次写入磁盘都没有提交给文件系统,而是暂时保存在例如只有在shell退出时才会删除ramfs / tmpfs。

通过这种方式,我可以准确地测试在真实机器上编译,部署和执行时一切都会如何表现,而不会对现有文件或目录造成任何危险,也不会在没有清理的情况下意外创建文件或目录。

1 个答案:

答案 0 :(得分:2)

你真的不需要安装&#39;在图书馆,您可以在开发树中工作。

(1)对于编译,你需要做的就是使用-I标志来指定库头文件的位置,这可以是一个相对路径,例如你可以做-I ../ .. /库/包括

(2)对于链接,你需要告诉链接器库所在的位置,你可以使用-L标志附加到库搜索顺序。

(3)对于测试应用程序,您认为应用程序需要能够找到库是正确的。你有几个选择:

(a)确保库和可执行文件位于同一目录

(b)您可以暂时修改当前shell中的LD_LIBRARY_PATH进行测试:

     export LD_LIBRARY_PATH=abs_path_to_library:$LD_LIBRARY_PATH

请注意,这只会影响您正在使用的当前shell(命令终端)。您可能已打开或稍后打开的任何其他shell将具有正常的LD_LIBRARY_PATH。我知道你指定你不想修改你的PATH或LD_LIBRARY_PATH,但是对于执行命令的shell是本地的,这是一个很好的,简单的方法。

(c)在客户端可执行文件中嵌入库的路径。为此,您需要将选项传递给链接器。 gcc的命令是:

     -Wl,-rpath,$(DEFAULT_LIB_INSTALL_PATH)

请参阅this how-to