通常情况下,当必须动态链接的库的路径在LD_LIBRARY_PATH中定义时,或者在创建二进制文件时使用-L标志来描述它。
在实际场景中,假设二进制文件已经构建并部署在客户端位置。现在,如果动态链接库路径之一的路径发生了更改。然后,我们需要向部署二进制文件的所有客户端提供一个新的make文件。
有没有其他方法,我们不需要告诉所有客户端更改其makefile,并可以在代码本身做些什么?如果yes...could有人请建议怎么做?
具有讽刺意味的是,有人向我提出了一个面试问题,但我没有得到答案。
编辑::有人专门问我在代码中可以做些什么,而不需要接触makefile。
发布于 2010-03-29 12:38:48
也许面试官想知道dlopen和dlsym?http://linux.die.net/man/3/dlsym的情况。
发布于 2010-03-29 12:27:25
通常,您应该只更改LD_LIBRARY_PATH,除非这可能与具有硬编码搜索路径的编译相关:rpath。
发布于 2010-03-29 11:34:41
使用环境变量(如MYLIBPATH ),并在makefile中使用此变量,而不是硬编码值。
因此,每个客户端都可以有自己的目录结构,只要他们正确地指定了MYLIBPATH,您的程序就会生成ok。
或者,您可以在makefile中查找库,如下所示
LIBPATH = $(shell find / -name libmylib.a -exec dirname {} ";" -quit)
myprog: myprog.c
$(CC) myprog.c -lmylib -L$(LIBPATH)编辑:将 locate替换为只返回与-quit选项第一次匹配的find
https://stackoverflow.com/questions/2537484
复制相似问题