【问题标题】:How is it possible that "-Wl,-rpath=" fails to find a library?“-Wl,-rpath=”怎么可能找不到库?
【发布时间】:2015-05-06 23:12:59
【问题描述】:

基本上我想在自定义目录中使用库:

编译器参数:

gcc -o conftest -Wl,-rpath=/MYPATH/ssl/lib -O2 -Wno-system-headers  -I/MYPATH/ssl//include -I/MYPATH/ssl//include/openssl  -L/MYPATH/ssl//lib conftest.c -lssl  -lcrypto -lrt

编译器错误(其中之一):

dso_dlfcn.c:(.text+0x19): undefined reference to `dlopen'

(这个例子取自一个失败的 curl config.log 文件,但问题是一般性的)

我仔细检查了 /MYPATH/ssl/lib 中是否存在 libssl.a 和 libcrypto.a,如上所示,-Wl,rpath= 选项已正确设置为编译器参数。

尽管使用了“-Wl,rpath”,但 gcc 怎么可能找不到该库?据我所知(到目前为止),“-Wl,rpath”应该永远不会失败,无论任何环境变量(如 LD_LIBRARY_PATH 等)或文件如何。

是否有任何环境变量会导致“-Wl,-rpath=”失败?

【问题讨论】:

  • 因为您需要为dlopen 链接dl 库。此外,发布的错误是链接器错误,使用 -Wl,rpath 设置 run-time 路径,而 -L 设置链接时路径。此外,如果链接静态库,则需要添加它们所依赖的所有库,因为静态库不是自包含的。
  • 很好的评论,您认为问题可能是由于openssl库编译错误引起的吗?

标签: c


【解决方案1】:

根据 Joachim 的评论,正确答案似乎是:

-Wl,rpath= 设置运行时路径 -L 设置链接路径

并回答问题:

不,-Wl,rpath 不会受到系统变量的负面影响。

【讨论】:

    猜你喜欢
    • 2011-09-27
    • 2017-12-14
    • 1970-01-01
    • 1970-01-01
    • 2014-11-24
    • 2018-01-12
    • 1970-01-01
    • 2020-10-15
    相关资源
    最近更新 更多