我几天前安装了Ubuntu,并使用apt-get安装了build_essentials、opencv、highgui等。g ++版本为4.6.1,opencv似乎是2.1.0。我没有从源代码编译opencv。
我们有一些使用opencv功能的软件。假设源文件名为a.cpp和b.cpp。我将其编译为a.o和b.o,然后将这些文件放入.so库中(称为libab.so)。
最后,有一个包含main函数的文件(称之为z.cpp)。我尝试从中构建可执行文件,但是会出现很多cv::相关的“未定义引用”错误。我的链接行类似于此:
我们有一些使用opencv功能的软件。假设源文件名为a.cpp和b.cpp。我将其编译为a.o和b.o,然后将这些文件放入.so库中(称为libab.so)。
最后,有一个包含main函数的文件(称之为z.cpp)。我尝试从中构建可执行文件,但是会出现很多cv::相关的“未定义引用”错误。我的链接行类似于此:
g++ -fPIC -g z.cpp -L../lib -lab -lml -lcvaux -lhighgui -lcv -lcxcore -o z.out
然后我遇到了未定义引用错误(全部是指cv::相关的内容)。
有趣的是,如果我直接链接我的.o文件,它就可以成功构建。所以这样做:
g++ -fPIC -g z.cpp a.o b.o -lml -lcvaux -lhighgui -lcv -lcxcore -o z.out
工作正常。
我所读的所有内容都表明这很可能是一个链接行顺序问题,但我尝试了所有排序排列并得到了同样的问题,所以我真的不认为这是我的问题,但我仍然可能错了。 有人有任何想法如何使用我的库构建它,以及为什么如果我使用成功的库中完整的.o文件集合构建,但无法使用库本身构建会有不同的行为吗?