[英]How to find “my” lib directory?
我正在Linux下开发一个C ++程序。 我想在库中放入一些东西(具体来说是LLVM位代码文件,但这并不重要),所以我想要以下目录结构:
/somewhere/bin/myBin
/somewhere/lib/myLib.bc
如何找到lib目录? 我尝试从argv[0]
计算相对部分,但是如果/somewhere
在我的PATH
,则argv[0]
仅包含myBin
。 有什么办法可以走这条路吗? 还是我必须在编译时设置它?
GNU自动工具如何处理呢? 如果为./configure
提供--prefix
选项,会发生什么情况?
编辑: 字库是有点在我的情况产生误导。 我的库包含LLVM位代码,因此它不是实际的(共享)对象文件,而只是我想从程序中打开的文件。 您可以将其视为图像或文本文件。
也许您想要的是:
/usr/lib
Unix目录参考: http : //www.comptechdoc.org/os/linux/usersguide/linux_ugfilestruct.html
假设您的lib目录是相对于可执行文件的“ ../lib”
首先,您需要确定myBin的位置,可以通过阅读/ proc / self / exe来获取它。
然后,用“ ../lib”连接二进制文件路径将给您lib目录。
您将必须使用编译器标志来告知程序。 例如,如果您有一个插件目录:
# Makefile.am
AM_CPPFLAGS = -DPLUGIN_DIR=\"${pkglibdir}\"
bin_PROGRAMS = awesome_prog
pkglib_LTLIBRARIES = someplugin.la
要搜索的目录列表存储在文件/etc/ld.so.conf
。
在Linux中,环境变量LD_LIBRARY_PATH
是用冒号分隔的一组目录,在该目录中,应在标准目录集之前先搜索库; 这在调试新库或出于特殊目的使用非标准库时很有用。
LD_LIBRARY_PATH
适用于开发和测试:
$ export LD_LIBRARY_PATH=/path/to/mylib.so
$ ./myprogram
仅解决部分问题“如何使用GNU自动工具处理此问题?” ...
当您分配--prefix进行配置时,基本上会发生两件事:1)它指示构建系统将所有内容都安装在$ {prefix}中,以及2)它看起来在$ {prefix} /share/config.site中有关如何设置系统的任何其他信息(通常不存在该文件。)它绝对无助于查找库,但取决于用户是否正确设置了工具链。 如果要在/ foo / lib中使用库,则必须在其中设置工具链(例如,通过将/ foo / lib放在/etc/ld.so.conf中,或通过-L / foo / LDFLAGS中的lib和LD_LIBRARY_PATH中的“ / foo / lib”)
configure脚本依赖您来设置环境。 它不会帮助您设置该环境,但会通过提醒您尚未设置环境来提供帮助。
您可以在/proc/self/exe
上使用readlink
系统调用来获取可执行文件的路径。 然后,您可以使用realpath
等。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.