我正在编写一个有一些资源的小C库(即我想在运行时编译的openCL代码,但我希望这个问题与图像或任意文本文件类似)。我需要在运行时加载这些资源。
如果资源随我的项目一起提供,我就可以使用argv[0]
。但是,在我目前的情况下,我的资源应该随我的库一起提供。我提前知道我的资源文件相对于.so
文件的位置。
如何从源代码中获取资源的路径?
答案 0 :(得分:1)
通常情况下,您在Makefile /您使用的任何构建系统中定义了某种类型的INSTALL_PREFIX
宏,这是由人们在编译库之前设置的。然后Makefile将它作为编译器标志传递给编译器,这样你就可以在代码中使用它(实质上你提前知道你要加载的资源的完整路径,而不必对它们进行硬编码)。
如果你打算最终打包你的库,你可能想要使用像autoconf或cmake这样的东西(看看其他项目是如何做到的)。但对于像这样简单的东西,你可以只使用Makefile:
生成文件:
INSTALL_PREFIX=/usr
CFLAGS=-DINSTALL_PREFIX=$(INSTALL_PREFIX)
foo.c的:
FILE *f = fopen(INSTALL_PREFIX "/share/mylib/data.txt", "r");