【问题标题】:using older version of a shared linux library while compiling C在编译 C 时使用旧版本的共享 linux 库
【发布时间】:2012-10-26 17:50:12
【问题描述】:

我正在尝试使用 libfann 2.0.1 版而不是最新的 2.2.0 版,但不知道该怎么做。关于如何做到这一点的任何想法?

通常效果很好:

gcc fann_calculator.c -o run_fann_calculator -lfann -lm

其中 fann_calculator.c 包含一个调用神经网络的程序。

谢谢

【问题讨论】:

  • 你得到的错误是......
  • 两个库都安装了吗?你怎么知道你没有得到你想要的结果?
  • 我得到的错误与最新版本中的一个功能有关:FANN 错误 4:从配置文件“/home/sifa/Desktop/CE//fann_network.net”读取“cascade_min_out_epochs”时出错。分段错误(核心转储)
  • @BrianCain 是的,这两个库都已安装,我想使用旧的。

标签: linux ubuntu shared-libraries dynamic-linking fann


【解决方案1】:

这取决于两个库所在的位置。如果它们安装在同一目录中(例如,都安装在 /usr/lib/ 中),您可能会得到最年轻的。

我建议仔细阅读ld.so(8)ldd(1) 手册页。您当然可以跟踪加载的库(例如 LD_DEBUG 环境变量)。不要忘记在库安装后适当地重新运行ldconfig

你也可以玩LD_LIBRARY_PATH的把戏;例如,将其设置为 $HOME/lib:/usr/lib 并在您的 $HOME/lib/ 中安装适当的符号链接到您想要的精确库。例如,您可能会这样做

  ln -s /usr/lib/libfann.so.2.0.1 $HOME/lib/libfann.so.2
  export LD_LIBRARY_PATH=$HOME/lib:/usr/lib:/lib

然后检查 ldd run_fann_calculator 是否获得了预期的 [version of the] libfann 库。

别忘了阅读Program Library Howto。您可能希望将适当的标志传递给ld,例如-rpath。您可能需要使用gcc 传递它们,也许使用Gcc Link Options,例如-Wl

【讨论】:

  • 然后使用LD_LIBRARY_PATH 技巧和来自$HOME/lib 的符号链接,并使用ldd 检查是否加载了正确的库。
猜你喜欢
  • 2016-09-27
  • 1970-01-01
  • 2018-10-07
  • 1970-01-01
  • 2012-05-19
  • 2015-11-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多