如何找到"my"库目录?
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自动工具如何处理这个问题?如果我将--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
等
- std::map<struct,struct>::find 找不到匹配项,但是如果我循环通过 begin() 到 end(),我在那里看到匹配项
- 找不到成员对象:没有名为get_event()的成员,也处理多态性和向量
- 为什么野牛仍在使用"int yylex(void)",却找不到"int yylex(YYS
- C++ Windows 驱动程序MSB3030无法复制该文件,因为它找不到
- 如何找出GDB的SIGTRAP核心转储的根本原因
- 奇怪的(对我来说)返回声明 - 在谷歌上找不到任何关于它的信息
- 函数何时会在c++中包含stack_Unwind_Resume调用
- 找不到QtResource文件中的文件
- Python中的for循环与C++有何不同
- VC++本机单元测试,找不到调试符号
- RegGetValue在当前用户下找不到名称
- 带有 -stdlib=libc++ 的 clang++ 9.0.1 找不到<optional>
- c++找不到具有相同哈希的无序集合元素
- 找不到以下加速库:boost_fiber
- 找不到 FLTK(缺少:FLTK_INCLUDE_DIR)
- 设置 Visual Studio for MPI: 找不到标识符错误
- "assimp/config.h"找不到,但它在文件夹中
- 链接器找不到在虚拟类 c++ 中访问的静态字段的符号
- C++系统找不到指定的文件错误
- FindPackageHandleStandardArgs.cmake:137 的 CMake 错误(消息):找不到 Boost (缺少:正则表达式)(找到合适的版本"1.72.0",