Clang链接器不会查看LD_LIBRARY_PATH路径

10

我正在尝试使用clang(3.0)构建和链接一个基于C++和cmake的项目。该项目链接到安装在自定义目录/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标志的情况下进行链接?


5
LD_LIBRARY_PATH是用于在启动时加载库文件,而不是用于解决链接依赖关系。也许您想使用LDFLAGS - Remus Rusanu
有趣的是,我在使用 CMake 时可以随意地交替使用 g++ 和 __clang++__,但从未遇到过类似的问题。我只需使用“link_directories()”宏来定义库路径即可。 - Hindol
1个回答

9

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

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

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


1
请注意,我还定义了LIBRARY_PATH变量。正如在这个问题https://dev59.com/FG855IYBdhLWcg3wm1m3中解释的那样,这个变量是让gcc找到自定义库的关键。我正在寻找类似于clang的东西。 - Régis B.
@RégisB。有趣;我从未使用过LIBRARY_PATH。使用-L有什么问题? - trojanfoe
1
-L选项需要更改cmake配置,这与我的同事共享。我现在将尝试使用/etc/ld.so.conf.d/的方法。 - Régis B.
2
@RégisB。/etc/ld.so.conf.d/也是仅限运行时的;我提到它是因为这比使用$LD_LIBRARY_PATH更好;它不会影响您的构建。为什么不在cmake配置中添加自定义变量,以便您们每个人都可以设置以在链接期间指定其他库(如果未设置,则不执行任何操作,不会影响您的同事)? - trojanfoe

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接