2010-03-29 84 views
0

通常情况下,当必须动态链接的库的路径在LD_LIBRARY_PATH中定义时,或者在创建二进制文件时将使用-L标记来提及。动态链接:链接路径的更改

在实际情况下,如果可以说二进制文件已经在客户端构建和部署。 现在,如果其中一个动态链接库路径的路径发生更改。 然后我们需要为部署二进制文件的所有客户端提供一个新的make文件。

是否有其他方法,我们不需要告诉所有的客户端来改变他们的makefile,并且可以在代码本身做些事情? 如果是的话......任何人都可以请建议如何?

这是一个讽刺的问题,我问了一个面试问题,但我没有答案。

编辑:我被特别询问可以在没有触摸makefile的情况下在代码中做什么。

+0

LD_LIBRARY_PATH与链接无关。它仅适用于运行时。 – 2010-03-29 11:41:41

回答

0

使用环境变量,如MYLIBPATH,并在makefile中使用此变量,而不是硬编码值。

所以每次客户端可以有自己的目录结构,只要他们正确地指定MYLIBPATH,你的程序建立确定。

或者你可以看看图书馆在你的makefile,这样

LIBPATH = $(shell find/-name libmylib.a -exec dirname {} ";" -quit) 

myprog: myprog.c 
     $(CC) myprog.c -lmylib -L$(LIBPATH) 

编辑:locatefind取代与-quit选项

+0

是的..这实际上是我的答案......但这并不是面板所同意的。他们希望能够在代码中完成 – Vijay 2010-03-29 11:37:24

+0

是'locate'命令仅存在于Linux上? – Vijay 2010-03-29 12:12:14

+0

查看更新后的答案 - 它使用POSIX'find',因此它在所有Unix上都可以正常使用 – qrdl 2010-03-29 12:38:42

1

通常你应该只改变LD_LIBRARY_PATH只返回第一个匹配,除非这可能与使用硬编码搜索路径的编译有关:rpath