opencv的应用程序 交叉编译出现警告:找不到动态链接库,但make可以生成执行文件,并在arm板上正常运行

时间:2020-12-29 14:52:45
在pc端交叉编译了一个视频采集程序,写了一个Makefile:
LIBS = $(shell pkg-config --libs opencv) -lpthread -lrt
SOURCES = cap.cpp
OBJECTS = $(SOURCES:.cpp=.o)
TARGET = cap
$(TARGET):$(OBJECTS)
arm-linux-g++ -o $@ $^  $(LIBS)
clean:
rm $(OBJECTS) $(TARGET)
%.o:%.cpp
arm-linux-g++ -o $@ -c $<

make:出现警告:
/opt/opt/EmbedSky/4.3.3/bin/../lib/gcc/arm-none-linux-gnueabi/4.3.3/../../../../arm-none-linux-gnueabi/bin/ld: warning: ../../lib/libopencv_core.so, needed by /usr/local/lib/libopencv_calib3d.so, not found (try using -rpath or -rpath-link)
/opt/opt/EmbedSky/4.3.3/bin/../lib/gcc/arm-none-linux-gnueabi/4.3.3/../../../../arm-none-linux-gnueabi/bin/ld: warning: ../../lib/libopencv_flann.so, needed by /usr/local/lib/libopencv_calib3d.so, not found (try using -rpath or -rpath-link)
/opt/opt/EmbedSky/4.3.3/bin/../lib/gcc/arm-none-linux-gnueabi/4.3.3/../../../../arm-none-linux-gnueabi/bin/ld: warning: ../../lib/libopencv_imgproc.so, needed by /usr/local/lib/libopencv_calib3d.so, not found (try using -rpath or -rpath-link)

但我已经把opencv目录下的include和lib库都复制到交叉编译器指定的目录下。
make最后生成的执行文件也可以在树莓派上执行。
请问怎么消除这些警告?

7 个解决方案

#1


楼主解决了吗?我也遇到这个问题了

#2


我的没这些警告,但是在板子上跑不起来,,,

#3


引用 2 楼 lishuang1224 的回复:
我的没这些警告,但是在板子上跑不起来,,,

兄弟,你跑起来了吗

#4


引用 楼主 you19890102 的回复:
在pc端交叉编译了一个视频采集程序,写了一个Makefile:
LIBS = $(shell pkg-config --libs opencv) -lpthread -lrt
SOURCES = cap.cpp
OBJECTS = $(SOURCES:.cpp=.o)
TARGET = cap
$(TARGET):$(OBJECTS)
arm-linux-g++ -o $@ $^  $(LIBS)
clean:
rm $(OBJECTS) $(TARGET)
%.o:%.cpp
arm-linux-g++ -o $@ -c $<

make:出现警告:
/opt/opt/EmbedSky/4.3.3/bin/../lib/gcc/arm-none-linux-gnueabi/4.3.3/../../../../arm-none-linux-gnueabi/bin/ld: warning: ../../lib/libopencv_core.so, needed by /usr/local/lib/libopencv_calib3d.so, not found (try using -rpath or -rpath-link)
/opt/opt/EmbedSky/4.3.3/bin/../lib/gcc/arm-none-linux-gnueabi/4.3.3/../../../../arm-none-linux-gnueabi/bin/ld: warning: ../../lib/libopencv_flann.so, needed by /usr/local/lib/libopencv_calib3d.so, not found (try using -rpath or -rpath-link)
/opt/opt/EmbedSky/4.3.3/bin/../lib/gcc/arm-none-linux-gnueabi/4.3.3/../../../../arm-none-linux-gnueabi/bin/ld: warning: ../../lib/libopencv_imgproc.so, needed by /usr/local/lib/libopencv_calib3d.so, not found (try using -rpath or -rpath-link)

但我已经把opencv目录下的include和lib库都复制到交叉编译器指定的目录下。
make最后生成的执行文件也可以在树莓派上执行。
请问怎么消除这些警告?


有可能是这些动态库编译时用的编译器与你现在的编译器版本不一。
也有可能是库之间的版本依赖问题, 即一些库也需要调用另一些库,但那库的版本太低了

#5


你可以尝试一下静态编译呢?

#6


libopencv_calib3d.so 是 arm eabi  版本吗?

#7


你的Makefile没有指定加载的opencv动态库

#1


楼主解决了吗?我也遇到这个问题了

#2


我的没这些警告,但是在板子上跑不起来,,,

#3


引用 2 楼 lishuang1224 的回复:
我的没这些警告,但是在板子上跑不起来,,,

兄弟,你跑起来了吗

#4


引用 楼主 you19890102 的回复:
在pc端交叉编译了一个视频采集程序,写了一个Makefile:
LIBS = $(shell pkg-config --libs opencv) -lpthread -lrt
SOURCES = cap.cpp
OBJECTS = $(SOURCES:.cpp=.o)
TARGET = cap
$(TARGET):$(OBJECTS)
arm-linux-g++ -o $@ $^  $(LIBS)
clean:
rm $(OBJECTS) $(TARGET)
%.o:%.cpp
arm-linux-g++ -o $@ -c $<

make:出现警告:
/opt/opt/EmbedSky/4.3.3/bin/../lib/gcc/arm-none-linux-gnueabi/4.3.3/../../../../arm-none-linux-gnueabi/bin/ld: warning: ../../lib/libopencv_core.so, needed by /usr/local/lib/libopencv_calib3d.so, not found (try using -rpath or -rpath-link)
/opt/opt/EmbedSky/4.3.3/bin/../lib/gcc/arm-none-linux-gnueabi/4.3.3/../../../../arm-none-linux-gnueabi/bin/ld: warning: ../../lib/libopencv_flann.so, needed by /usr/local/lib/libopencv_calib3d.so, not found (try using -rpath or -rpath-link)
/opt/opt/EmbedSky/4.3.3/bin/../lib/gcc/arm-none-linux-gnueabi/4.3.3/../../../../arm-none-linux-gnueabi/bin/ld: warning: ../../lib/libopencv_imgproc.so, needed by /usr/local/lib/libopencv_calib3d.so, not found (try using -rpath or -rpath-link)

但我已经把opencv目录下的include和lib库都复制到交叉编译器指定的目录下。
make最后生成的执行文件也可以在树莓派上执行。
请问怎么消除这些警告?


有可能是这些动态库编译时用的编译器与你现在的编译器版本不一。
也有可能是库之间的版本依赖问题, 即一些库也需要调用另一些库,但那库的版本太低了

#5


你可以尝试一下静态编译呢?

#6


libopencv_calib3d.so 是 arm eabi  版本吗?

#7


你的Makefile没有指定加载的opencv动态库