C库中的资源路径

时间:2015-09-23 00:12:33

标签: c

我正在编写一个有一些资源的小C库(即我想在运行时编译的openCL代码,但我希望这个问题与图像或任意文本文件类似)。我需要在运行时加载这些资源。

如果资源随我的项目一起提供,我就可以使用argv[0]。但是,在我目前的情况下,我的资源应该随我的库一起提供。我提前知道我的资源文件相对于.so文件的位置。

如何从源代码中获取资源的路径?

1 个答案:

答案 0 :(得分:1)

通常情况下,您在Makefile /您使用的任何构建系统中定义了某种类型的INSTALL_PREFIX宏,这是由人们在编译库之前设置的。然后Makefile将它作为编译器标志传递给编译器,这样你就可以在代码中使用它(实质上你提前知道你要加载的资源的完整路径,而不必对它们进行硬编码)。

如果你打算最终打包你的库,你可能想要使用像autoconfcmake这样的东西(看看其他项目是如何做到的)。但对于像这样简单的东西,你可以只使用Makefile:

生成文件:

INSTALL_PREFIX=/usr
CFLAGS=-DINSTALL_PREFIX=$(INSTALL_PREFIX)

foo.c的:

FILE *f = fopen(INSTALL_PREFIX "/share/mylib/data.txt", "r");