在运行时找不到链接库 (c++)
Linked library not found at run-time (c++)
我有以下制作文件
FLAGS = -g -c -Wall -Wextra -O2 -pedantic -Werror
CC = g++
SOURCE = $(wildcard src/*.cpp)
INTERM = $(patsubst %.cpp,%.o,$(SOURCE))
OBJECTS = $(patsubst src/%,nbobj/%,$(INTERM))
RES = app
INCLUDE = -I../../libs
OPENCV = -L/usr/local/lib `pkg-config --cflags --libs opencv`
LINK = -L./../../libs -lgstd $(OPENCV)
$(RES): $(OBJECTS)
$(CC) $(OBJECTS) -o $(RES) $(LINK)
nbobj/%.o: src/%.cpp
$(CC) $(FLAGS) $(INCLUDE) -o $@ -c $<
clean:
rm -rf $(RES) $(OBJECTS)
它编译得很好,但是当我运行程序时,我得到
加载共享库时出错:libgstd.so:无法打开共享对象文件:没有此类文件或目录
这给我提出了几个问题:
- libgstd 在编译时被清楚地找到(如果我删除 -lgstd,程序不会编译),并且在我运行程序时 .so 没有移动。怎么突然找不到了?
- 我读过很多帖子,说我需要修改ld.conf。我认为 -L 标志的目的是精确地避免这种情况。我真的不想修改我编写的小型库的系统文件。我还想将可执行文件和libgstd一起放在一个文件夹中,而不会强迫任何人通过弄乱系统文件来"安装"libgstd
- 我还读过 -R 标志相当于运行时的 -L,但是如果我使用 -R 编译,编译器会说"错误:无法识别的选项 '-R'"
此外,我遇到了类似的问题,我有一个包含对"clock_gettime"调用的库。它编译得很好,但在运行时,当我使用该库中的函数时,我得到"对'clock_gettime'的未定义引用"。为什么当我编译库时,链接器显然找到了clock_gettime,但是当我使用该库时,即使没有移动任何文件,也找不到它?
非常感谢您的帮助:)
启动程序时,操作系统找不到要加载的库,尤其是它甚至不知道在哪里搜索,因为./.。/../libs 不是它将搜索的路径。你可以做两件事。首先,将 lib 移动到它将搜索的文件夹(取决于您的系统)
/lib/或/lib64/或/usr/lib 或 ...
或第二次显示您的操作系统在哪里搜索
导出 LD_LIBRARY_PATH=/绝对/路径/到/库
参数 -L 指定在链接到链接器时搜索的其他路径;不是在运行时到操作系统。-l 为链接器指定其他库。
相关文章:
- lambda参数转换为constexpr技巧,然后获取带链接的数组
- CMake-按正确顺序将项目与C运行时对象文件链接
- 从链接列表c++中删除一个项目
- 有根的二进制搜索树.保留与其父级的链接
- 读取文件的最后一行并输入到链接列表时出错
- 静态数据成员的问题-修复链接错误会导致编译器错误
- node-gyp 在 macOS 上未正确链接库
- 基于boost的程序的静态链接——zlib问题
- 无法链接 CMake 中的本地库
- 内联函数中具有内部链接的全局变量
- 链接阶段在Ubuntu上失败,但在MacOS上失败
- 使用gcc从静态链接的文件中查找可选符号
- 我可以将一个用clang c++11编译的对象与另一个用c++17编译的对象链接起来吗
- 将--whole archive链接器选项与CMake和具有其他库依赖项的库一起使用
- 下面是我为检测链接列表中的循环而制作的代码
- 有了gcc,是否可以链接库,但前提是它存在
- 使用C链接在函数内部创建C++模板
- Visual Studio mkl_link_tool.exe链接错误
- 尝试链接我的着色器时,我收到错误代码"error c5145 must write to gl_position"
- 有人能帮我处理这个链接列表吗?C++