最近在安装v4l-test-0.19时遇到了问题:
此问题困扰了我很久,我尝试了许多方法:
1,在使用gcc编译的时候是:gcc xxx -pthread,及可以在后面添加-pthread,具体可参考一下网址:
https://blog.csdn.net/dangzhangjing97/article/details/80169103
尝试之后没有效果,哭%>_<%~
2,将lcunit放在最后,及cc -lcunit -o *.o v4l-test 改为 cc -lcunit -o *.o v4l-test -lcunit。结果成功了,开心~,参考网址:
https://sourceforge.net/p/cunit/discussion/103746/thread/8b6a20c2/
kungfoo @ artur〜/ tmp $ cc -lcunit -o cunit_example cunit_example.c
/tmp/cc2LVLaR.o:在函数testFPRINTF': cunit_example.c:(.text+0xd6): undefined reference to
CU_assertImplementation'中
cunit_example.c :(。text + 0x124):未定义对'CU_assertImplementation'的引用
...
kungfoo @ artur 〜/ tmp $ cc -lcunit -o cunit_example cunit_example.c -lcunit
kungfoo @ artur〜/ tmp $
在某些情况下,必须在源/对象列表之前使用-l ...,并且在大多数情况下,在列表/列表之后是必需的。如果同时使用这两种方法似乎都可行,所以我采用一种策略,在以后的Makefile中将-l ...放在源/对象列表的前面和后面。
我确实没有这种情况的任何逻辑原因,但事实确实如此。显然,ld对库的处理方式有所不同,将库放在link命令的末尾是标准做法。
我不确定导致问题的确切代码路径是什么,但是当我开始看到未定义的引用时,我首先使用了字符串,并在/usr/lib/libcunit.a中找到了函数名称,然后我使用了nm,并且看到该库包含未定义的符号。链接对我来说仍然是一个神奇的黑匣子,因此我无法真正解释所有这些事情。如果有人能在这种情况下发挥一些专业知识,我将不胜感激。