rhel – 如何以这样的方式配置我的环境:使用适当的(不同于系统的)版本的库

我想这个问题是ServerFault和*与本网站之间的界限.但我认为U& L最相关.

我有一些C代码依赖于版本X中的库,系统提供版本Y(X> Y).我已编译此库并将结果文件放入/ opt / lib_name / X / lib,版本Y安装在/usr/lib64中.我想链接反对这样的库.

现在我想创建一些以某种方式启用版本X的脚本,因此我使用gcc构建的任何代码都是针对版本X编译的,而makefile中没有任何更改.

现在我设置了LIBRARY_NAME_DIR变量,在makefile中我只是追加-L $LIBRARY_NAME_DIR,它可以运行但需要我更改makefile.

如果没有root权限访问计算机,有没有办法做这类事情.

注意:虽然我认为这个问题的答案不依赖于特定的库或代码,但我特定问题的所有细节都在这里:https://*.com/q/24189130/7918.

我尝试过的:

>我已设置:LIBRARY_PATH,LD_LIBRARY_PATH,CPLUS_INCLUDE_PATH.

解决方法:

我认为没有任何办法可以完全用环境变量做到这一点.使用LIBRARY_PATH的问题似乎是任何给定的-L选项都有优先权.如果由于任何原因gcc命令具有-L /usr/lib64,则将首先搜索该文件,并找到该库的旧版本.看起来你要改变Makefile,你也应该注意首先不出现-L /usr/lib64.

但是,看看你的SO问题,看起来上面的问题并不像是一个问题.但是,有一个不必要的尾随:LIBRARY_PATH变量的值,这可能解释了为什么它不起作用.

此外,如SO问题的答案中所述,LD_LIBRARY_PATH由动态链接器使用,并且仅在运行时与您的应用程序相关.如果在运行应用程序时找不到动态库的位置,则可以使用此方法. GNU链接器使用的是LD_RUN_PATH,它基本上用于-rpath LIBRARY_PATH为-rpath所做的事情,除了指定任何-rpath意味着将忽略LIBRARY_PATH(而不仅仅是给出较低的优先级).

你可以尝试的是:

LIBRARY_PATH=/opt/lib_name/X/lib LD_RUN_PATH=/opt/lib_name/X/lib make

可能更健壮的东西是为gcc创建一个包含必要选项的包装脚本,例如:

#!/bin/sh
gcc -L/opt/lib_name/X/lib -Wl,-rpath,/opt/lib_name/X/lib "$@"

将文件命名为gcc,使其可执行并将其放在目录中(或者至少有一个没有与生命命令同名的文件).然后你可以运行make:

PATH=/path/to/script:$PATH make
上一篇:IDEA项目启动配置


下一篇:Fedora 27 /usr/bin/ld:找不到-lstdc