【问题标题】:Clang linker does not look into LD_LIBRARY_PATHClang 链接器不查看 LD_LIBRARY_PATH
【发布时间】:2012-09-16 23:20:42
【问题描述】:

我正在尝试使用 clang (3.0) 构建和链接基于 cmake 的 C++ 项目。此项目链接到安装在自定义目录 /my/dir/ 中的几个库。此目录包含在 LD_LIBRARY_PATH 和 LIBRARY_PATH 环境变量中。项目可以使用 g++ 构建和链接。

cmake生成并执行的链接命令如下所示:

/usr/bin/clang++ -O3 stuff.cpp.o -o stuff -rdynamic -lmylib

ld 然后抱怨以下消息:

/usr/bin/ld: cannot find -lmylib

每当我手动添加-L/my/dir/ 时,上面的链接命令运行良好。有没有办法在不指定-L 标志的情况下进行链接?

【问题讨论】:

  • LD_LIBRARY_PATH 用于在启动时加载库,而不是用于解决链接依赖关系。也许您想使用LDFLAGS
  • 有趣。我将 g++clang++ 与 CMake 互换使用,但从未遇到过类似的问题。我只是使用link_directories() 宏来定义库路径。

标签: c++ cmake clang ld


【解决方案1】:

$LD_LIBRARY_PATH 环境变量(以及它在其他基于 UNIX 的平台上的各种替代品)在运行时而不是链接时用于查找库。 p>

使用-L 是正确的做法,无法避免。

注意:在 Linux 下更好的方法(你没有指定你的平台,所以我猜)是正确配置 /etc/ld.so.conf.d/ 中的文件并完全避免使用 $LD_LIBRARY_PATH

【讨论】:

  • 请注意,我还定义了 LIBRARY_PATH 变量。正如这个问题stackoverflow.com/questions/4250624/… 中所解释的那样,这个变量允许 gcc 找到自定义库。我正在为 clang 寻找类似的东西。
  • @RégisB。有趣的;我从未使用过LIBRARY_PATH。使用-L有什么问题?
  • -L选项需要修改cmake配置,分享给同事。我现在将尝试采用 /etc/ld.so.conf.d/ 方式。
  • @RégisB。 /etc/ld.so.conf.d/ 也只是 runtime;我提到它是因为它比使用$LD_LIBRARY_PATH 更好;它不会影响您的构建。为什么不在 cmake 配置中添加一个自定义变量,你们每个人都可以设置它以在链接期间指定其他库(如果没有设置它什么都不做,也不会影响你的同事)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2011-04-24
  • 2011-05-08
  • 2016-03-31
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-05-22
相关资源
最近更新 更多