【发布时间】: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