【问题标题】:is it possible to suppress user libraries from system libraies in linux是否可以从linux中的系统库中抑制用户库
【发布时间】:2013-11-29 19:07:05
【问题描述】:

我正在创建一个使用预编译的第三方共享库文件的应用程序。要使用这些文件,我需要设置 LD_LIBRARY_PATH 或在 /etc/ld.so.conf.d/ 下创建一个 conf 文件application.conf,我的问题是 /usr/lib/ 下已经有一个系统 libcurl.so.4 可用。第三方库也有一个 libcurl.so.4 。如果我创建 /etc/ld.so.conf.d/application.conf 文件,我将无法使用 "YUM installer" 。 我收到了错误

Pycurl error occured ,

Compile time Version is higher than the Linking version

我担心删除应用程序 libcurl.so.4,因为它可能会破坏我正在使用的第三方库中的功能(使我的应用程序的意义减少),而且我不能忽视系统库要么。

是否可以像我上面提到的那样使用这两个库而没有任何冲突。

PS : 设置 LD_LIBRARY_PATH 也会导致同样的问题

【问题讨论】:

    标签: linux shared-libraries libcurl yum pycurl


    【解决方案1】:

    在调用可执行文件之前创建一个设置和导出$LD_LIBRARY_PATH 的脚本。脚本退出后,该变量将消失。

    【讨论】:

    • Ignacio Vazquez-Abrams 。在决定在 etc/ld.so.conf.d/ 下创建 conf 文件之前,我曾尝试过。我面临的问题是shell脚本将路径导出到子shell并且在当前shell中它没有效果,这就是我使用它的方式,export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/path/to/third-party/libraries。
    • 为什么当前的 shell 需要它?脚本正在调用可执行文件。
    • 正如你所说,脚本正在执行可执行文件,但如果使用导出命令,则不会在调用可执行文件的 shell 中导出命令。我引用了this page。因为它表明我不可能使用 source 或 .在系统启动时运行 shell 脚本(据我所知,如果我错了,请纠正我)。
    • 的。脚本。是。调用。这。可执行。 export LD_LIBRARY_PATH="$PWD"./someexecutablewithprivatelibraries
    • 抱歉误导您.. 脚本用于执行可执行文件.. 除非路径正确,否则可执行文件未运行.. 正如您所说./someexecutablewithprivatelibraries 将需要额外的“。”或“./someexecutablewithprivatelibraries”之前的“source”,以便导出命令正常工作,这对我没有帮助..
    【解决方案2】:

    如果您有 2 个冲突的库,一个是系统库,另一个是用户应用程序,请不要将 application.conf 放入 /etc/ld.so.conf.d/。而是使用 ~your_user_name/custom_conf 之类的东西,将您的 application.conf 文件放在那里(最终您可能需要编辑它,添加正确版本的 libcurl.so.4 的路径)。 libcurl.so.4 也不应该在系统目录中,而是在 ~your_user_name/lib 中。您可以为您的应用程序制作一个包装器,您可以按照 Ignacio Vazquez-Abrams 的建议设置 $LD_LIBRARY_PATH=$LD_LIBRARY_PATH:~your_user_name/lib,或者编译您的应用程序,明确指出要链接的库(使用链接器标志 -L /full/path/to/your/libcurl.so.4

    【讨论】:

      猜你喜欢
      • 2020-03-09
      • 2019-07-19
      • 1970-01-01
      • 2017-11-07
      • 2018-06-16
      • 1970-01-01
      • 2013-07-21
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多