我有以下生成文件
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,但是当我使用库时,即使没有文件被移动,也找不到它?
非常感谢你的帮助 :)