我需要在现有的长C源代码中进行一些更改。有一个顶级的Makefile,它定义了各种编译器选项,比如链接器使用的库的目录位置。
类似的东西:
LD_OPTIONS = $(PATH_TO_MYLIB1) $(PATH_TO_MYLIB2)
现在,我正在考虑使用dlsym()
和dlopen()
来使用这些库,而不是显式链接它们。为此,我需要库路径。
dlopen( path_to_lib , RTLD_NOW) ;
如何使用Makefile中的PATH_TO_LIB
变量并在我的程序中使用它?我想过使用“echo
与system()
”之类的东西。但是,我希望有更好的解决方案。 : - )
答案 0 :(得分:9)
在你的makefile中你可以写
CFLAGS += -DPATH_TO_LIB="somepath/somelib"
因此PATH_TO_LIB
成为预处理器宏,您可以在源代码中使用
dlopen(PATH_TO_LIB, RTLD_NOW);
答案 1 :(得分:4)
如果你的路径是硬编码的话,我没有太多看到你改变的意义,但我离题了。你可以这样做:
在makefile中:
CFLAGS = -DMYLIB_1=$(PATH_TO_MYLIB1) -DMYLIB_2=$(PATH_TO_MYLIB2)
然后在你的源头:
dlopen(MYLIB_1, RTLD_NOW);
答案 2 :(得分:2)
也许这样的事情?
在您的代码中
#ifndef PATH_TO_LIB
#error Path to ImportantLib missing
#endif ...
,编译命令可能如下所示:
cc -DPATH_TO_LIB=\"${PATH_TO_LIB}\"