如何找到"my"库目录?

How to find "my" lib directory?

本文关键字:my 何找      更新时间:2023-10-16

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

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

如何查找lib目录?我试图从argv[0]计算一个相对部分,但如果/somewhere在我的PATH中,argv[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自动工具如何处理此问题?"。。。

当您分配一个--prefix进行配置时,基本上会发生两件事:1)它指示构建系统所有东西都要安装在${prefix}中,2)它在${refix}/share/config.site中查找有关系统如何设置的任何附加信息(该文件不存在是常见的),而是取决于用户已经正确地设置了工具链。如果你想在/foo/lib中使用一个库,你必须将你的工具链设置为在那里查找(例如,在/etc/ld.so.conf中放入/foo/li,或者在LDFLAGS中放入-L/foo/lip,在ld_library_PATH中放入"/foo/li卜")

配置脚本依赖于您设置环境。它不会帮助您设置环境,但会提醒您尚未设置环境。

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