交叉编译_静态库的问题

chubin1989 2013-10-29 11:33:49
我现在手上有一块arm开发板,装的是linux,上面没有GCC等东西,是块阉割版空板,只有基本linux系统。
我想在上面跑一个我编写的程序,于是在自己的PC的虚拟机上装了个Ubuntu和Eclipse,有实验过一个交叉编译程序,成功了,但是只用到基础的库,系统中都有,我现在在Ubuntu上装了Opencv,但arm板上不想装,
问题1:是否能够通过静态库链接的方式将opencv中用到的库函数全封装到我交叉编译中的程序里,直接在arm上跑?
问题2:我在Ubuntu的eclipse上用自己写的makefile build的时候有问题如下,我直接用-o可以编译出.o文件,但是加上-static后并不能编译通过,错误为undefined reference to “cvXX”的函数,并没有报找不到头文件,只是错误显示这些cv函数未定义,请问怎么解决?
...全文
858 14 打赏 收藏 转发到动态 举报
写回复
用AI写文章
14 条回复
切换为时间正序
请发表友善的回复…
发表回复
zhxianbin 2013-10-30
  • 打赏
  • 举报
回复
引用 11 楼 chubin1989 的回复:
[quote=引用 10 楼 zjukulin 的回复:] [quote=引用 8 楼 chubin1989 的回复:] 链接问题是指?怎么改呢?
链接命令中静态库是有先后顺序的,-lcv -lcvaux -lcxcore -lhighgui -lstdc++ 这几个库的顺序调整下[/quote] 乱调顺序调了半天还是不行.....囧,感觉按这个报的错误来看是没有找到头文件中的定义,但又没有报找不到头文件好奇怪......[/quote] 不是找不到头文件的问题,找不到头文件.o 文件都生成不了,这是链接阶段了,和库文件有关
骁Captain 2013-10-30
  • 打赏
  • 举报
回复
引用 11 楼 chubin1989 的回复:
[quote=引用 10 楼 zjukulin 的回复:] [quote=引用 8 楼 chubin1989 的回复:] 链接问题是指?怎么改呢?
链接命令中静态库是有先后顺序的,-lcv -lcvaux -lcxcore -lhighgui -lstdc++ 这几个库的顺序调整下[/quote] 乱调顺序调了半天还是不行.....囧,感觉按这个报的错误来看是没有找到头文件中的定义,但又没有报找不到头文件好奇怪......[/quote] 静态库的依赖关系再查查,一般来说,比如lib1.a调用了lib2.a中的函数,那么-l1就要写在-l2前面
chubin1989 2013-10-30
  • 打赏
  • 举报
回复
引用 10 楼 zjukulin 的回复:
[quote=引用 8 楼 chubin1989 的回复:] 链接问题是指?怎么改呢?
链接命令中静态库是有先后顺序的,-lcv -lcvaux -lcxcore -lhighgui -lstdc++ 这几个库的顺序调整下[/quote] 乱调顺序调了半天还是不行.....囧,感觉按这个报的错误来看是没有找到头文件中的定义,但又没有报找不到头文件好奇怪......
骁Captain 2013-10-30
  • 打赏
  • 举报
回复
引用 8 楼 chubin1989 的回复:
链接问题是指?怎么改呢?
链接命令中静态库是有先后顺序的,-lcv -lcvaux -lcxcore -lhighgui -lstdc++ 这几个库的顺序调整下
chubin1989 2013-10-30
  • 打赏
  • 举报
回复
引用 6 楼 zhxianbin 的回复:
[quote=引用 5 楼 chubin1989 的回复:] 编译反馈信息如下: make all arm-linux-g++ -I/usr/local/libopencv-arm/include/opencv -L/usr/local/libopencv-arm/lib -lcv -lcvaux -lcxcore -lhighgui -lstdc++ -static -o bridge.o bridge.cpp /usr/local/arm/4.3.2/bin/../lib/gcc/arm-none-linux-gnueabi/4.3.2/../../../../arm-none-linux-gnueabi/bin/ld: warning: library search path "/usr/local/libopencv-arm/lib" is unsafe for cross-compilation /tmp/ccI82PC1.o: In function `FillIn(_IplImage*)': bridge.cpp:(.text+0x16c): undefined reference to `cvCreateImage' bridge.cpp:(.text+0x394): undefined reference to `cvLine' bridge.cpp:(.text+0x524): undefined reference to `cvLine' ..... 没有报头文件找不到(头文件在.cpp中包含了),只是报这些函数未定义....求解
先 去掉 static 看看[/quote] 去掉static,反馈信息如下: **** Build of configuration Debug for project bridge **** make all arm-linux-g++ -I/usr/local/libopencv-arm/include/opencv -L/usr/local/libopencv-arm/lib -lcv -lcvaux -lcxcore -lhighgui -lstdc++ -o bridge.o bridge.cpp /usr/local/arm/4.3.2/bin/../lib/gcc/arm-none-linux-gnueabi/4.3.2/../../../../arm-none-linux-gnueabi/bin/ld: warning: library search path "/usr/local/libopencv-arm/lib" is unsafe for cross-compilation **** Build Finished ****
chubin1989 2013-10-30
  • 打赏
  • 举报
回复
引用 6 楼 zhxianbin 的回复:
[quote=引用 5 楼 chubin1989 的回复:] 编译反馈信息如下: make all arm-linux-g++ -I/usr/local/libopencv-arm/include/opencv -L/usr/local/libopencv-arm/lib -lcv -lcvaux -lcxcore -lhighgui -lstdc++ -static -o bridge.o bridge.cpp /usr/local/arm/4.3.2/bin/../lib/gcc/arm-none-linux-gnueabi/4.3.2/../../../../arm-none-linux-gnueabi/bin/ld: warning: library search path "/usr/local/libopencv-arm/lib" is unsafe for cross-compilation /tmp/ccI82PC1.o: In function `FillIn(_IplImage*)': bridge.cpp:(.text+0x16c): undefined reference to `cvCreateImage' bridge.cpp:(.text+0x394): undefined reference to `cvLine' bridge.cpp:(.text+0x524): undefined reference to `cvLine' ..... 没有报头文件找不到(头文件在.cpp中包含了),只是报这些函数未定义....求解
先 去掉 static 看看[/quote] 链接问题是指?怎么改呢?
骁Captain 2013-10-30
  • 打赏
  • 举报
回复
引用 5 楼 chubin1989 的回复:
编译反馈信息如下: make all arm-linux-g++ -I/usr/local/libopencv-arm/include/opencv -L/usr/local/libopencv-arm/lib -lcv -lcvaux -lcxcore -lhighgui -lstdc++ -static -o bridge.o bridge.cpp /usr/local/arm/4.3.2/bin/../lib/gcc/arm-none-linux-gnueabi/4.3.2/../../../../arm-none-linux-gnueabi/bin/ld: warning: library search path "/usr/local/libopencv-arm/lib" is unsafe for cross-compilation /tmp/ccI82PC1.o: In function `FillIn(_IplImage*)': bridge.cpp:(.text+0x16c): undefined reference to `cvCreateImage' bridge.cpp:(.text+0x394): undefined reference to `cvLine' bridge.cpp:(.text+0x524): undefined reference to `cvLine' ..... 没有报头文件找不到(头文件在.cpp中包含了),只是报这些函数未定义....求解
链接问题
zhxianbin 2013-10-30
  • 打赏
  • 举报
回复
引用 5 楼 chubin1989 的回复:
编译反馈信息如下: make all arm-linux-g++ -I/usr/local/libopencv-arm/include/opencv -L/usr/local/libopencv-arm/lib -lcv -lcvaux -lcxcore -lhighgui -lstdc++ -static -o bridge.o bridge.cpp /usr/local/arm/4.3.2/bin/../lib/gcc/arm-none-linux-gnueabi/4.3.2/../../../../arm-none-linux-gnueabi/bin/ld: warning: library search path "/usr/local/libopencv-arm/lib" is unsafe for cross-compilation /tmp/ccI82PC1.o: In function `FillIn(_IplImage*)': bridge.cpp:(.text+0x16c): undefined reference to `cvCreateImage' bridge.cpp:(.text+0x394): undefined reference to `cvLine' bridge.cpp:(.text+0x524): undefined reference to `cvLine' ..... 没有报头文件找不到(头文件在.cpp中包含了),只是报这些函数未定义....求解
先 去掉 static 看看
chubin1989 2013-10-30
  • 打赏
  • 举报
回复
编译反馈信息如下: make all arm-linux-g++ -I/usr/local/libopencv-arm/include/opencv -L/usr/local/libopencv-arm/lib -lcv -lcvaux -lcxcore -lhighgui -lstdc++ -static -o bridge.o bridge.cpp /usr/local/arm/4.3.2/bin/../lib/gcc/arm-none-linux-gnueabi/4.3.2/../../../../arm-none-linux-gnueabi/bin/ld: warning: library search path "/usr/local/libopencv-arm/lib" is unsafe for cross-compilation /tmp/ccI82PC1.o: In function `FillIn(_IplImage*)': bridge.cpp:(.text+0x16c): undefined reference to `cvCreateImage' bridge.cpp:(.text+0x394): undefined reference to `cvLine' bridge.cpp:(.text+0x524): undefined reference to `cvLine' ..... 没有报头文件找不到(头文件在.cpp中包含了),只是报这些函数未定义....求解
chubin1989 2013-10-30
  • 打赏
  • 举报
回复
引用 3 楼 zhxianbin 的回复:
用 -L<路径> -l<lib文件> 加库文件
ARCH=arm CROSS_COMPILE=arm-linux- obj := bridge.o KDIR :=/mykernel/linux2.6.35-icool210-v1.0.1 PWD :=$(shell pwd) all: arm-linux-g++ -I/usr/local/libopencv-arm/include/opencv -L/usr/local/libopencv-arm/lib -lcv -lcvaux -lcxcore -lhighgui -lstdc++ -static -o bridge.o bridge.cpp clean: rm -f bridge.o makefile如上,有加-L路径,-c试过,也是通过
zhxianbin 2013-10-30
  • 打赏
  • 举报
回复
用 -L<路径> -l<lib文件> 加库文件
zhxianbin 2013-10-30
  • 打赏
  • 举报
回复
1. 理论上可以,但没试过 2. 有没有加库文件路径, .o文件不链接的,所以不出错
骁Captain 2013-10-30
  • 打赏
  • 举报
回复
问题2,可能原因是库的链接顺序不对,编译命令中调整下顺序
zhxianbin 2013-10-30
  • 打赏
  • 举报
回复
arm-none-linux-ldd 看一下库文件的依赖 或者 干脆用 动态链接

2,425

社区成员

发帖
与我相关
我的任务
社区描述
硬件/嵌入开发 其他硬件开发
社区管理员
  • 其他硬件开发社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧