如何find“我的”lib目录?

我正在Linux下开发一个C ++程序。 我想把一些东西(具体来说,LLVM位码文件,但这不是重要的)在库中,所以我想要以下目录结构:

/somewhere/bin/myBin /somewhere/lib/myLib.bc 

我如何findlib目录? 我试图计算argv[0]的相对部分,但是如果/somewhere我的PATH位于我的PATHargv[0]将只包含myBin 。 有什么方法可以得到这条路? 或者我必须在编译时设置它?

GNU自动工具如何处理这个? 如果我将--prefix选项提供给./configure会发生什么情况?

编辑:在我的情况下,词库是有点误导。 我的包含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 autotools如何处理这个问题”部分的问题?

当你指定一个–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”)

配置脚本依靠你来建立环境。 它不能帮助你建立这样的环境,但通过提醒你没有这样做是有帮助的。

您可以在/proc/self/exe上使用readlink系统调用来获取可执行文件的路径。 你可能会使用realpath