用我自己的库打包opencv库



我正在尝试用我自己的库打包opencv库。我是这样做的:

ar x libopencv_highgui.a
ar x libopencv_core.a
ar x libopencv_imgproc.a
ar x libmyown.a
ar cru libnew.a *.o

当我使用这个新库libnew.a时,会出现很多错误,比如:

grfmt_bmp.cpp:(.text._ZN2cv10BmpDecoder8readDataERNS_3MatE+0x282):对CvtPaletteToGray(PaletteEntry const*, unsigned char*, int)' grfmt_bmp.cpp:(.text._ZN2cv10BmpDecoder8readDataERNS_3MatE+0x321): undefined reference toFillColorRow1的未定义引用(unsigned char*,unsigned char*,int,PaletteEntry*)'grfmt_bmp.cpp:(.text._ZN2cv10BmpDecoder8readDataERNS_3MatE+0x376):对FillColorRow1(unsigned char*, unsigned char*, int, PaletteEntry*)' grfmt_bmp.cpp:(.text._ZN2cv10BmpDecoder8readDataERNS_3MatE+0x3b5): undefined reference toicvCvt_BGR2Gray_8u_C3C1R的未定义引用(无符号字符const*,int,无符号字符*,int、CvSize,int)'grfmt_bmp.cpp:(.text._ZN2cv10BmpDecoder8readDataERNS_3MatE+0x449):未定义对FillGrayRow4(unsigned char*, unsigned char*, int, unsigned char*)' grfmt_bmp.cpp:(.text._ZN2cv10BmpDecoder8readDataERNS_3MatE+0x492): undefined reference toFillColorRow4的引用(无符号字符*、无符号字符*int、PaletteEntry*)'grfmt_bmp.cpp:(.text._ZN2cv10BmpDecoder8readDataERNS_3MatE+0x524):未定义对FillGrayRow8(unsigned char*, unsigned char*, int, unsigned char*)' grfmt_bmp.cpp:(.text._ZN2cv10BmpDecoder8readDataERNS_3MatE+0x567): undefined reference toFillColorRow8的引用(无符号字符*、无符号字符*int、PaletteEntry*)'grfmt_bmp.cpp:(.text._ZN2cv10BmpDecoder8readDataERNS_3MatE+0x5f9):对icvCvt_BGR5552BGR_8u_C2C3R(unsigned char const*, int, unsigned char*, int, CvSize)' grfmt_bmp.cpp:(.text._ZN2cv10BmpDecoder8readDataERNS_3MatE+0x669): undefined reference toicvCvt_BGR5552Gray_8u_C2C1R的未定义引用(无符号字符const*,int,无符号字符*,int、CvSize)'grfmt_bmp.cpp:(.text._ZN2cv10BmpDecoder8readDataERNS_3MatE+0x6fa):对icvCvt_BGR5652BGR_8u_C2C3R(unsigned char const*, int, unsigned char*, int, CvSize)' grfmt_bmp.cpp:(.text._ZN2cv10BmpDecoder8readDataERNS_3MatE+0x769): undefined reference toicvCvt_BGR5652Gray_8u_C2C1R的未定义引用(无符号字符const*,int,无符号字符*,int、CvSize)'grfmt_bmp.cpp:(.text._ZN2cv10BmpDecoder8readDataERNS_3MatE+0x843):对icvCvt_BGR2Gray_8u_C3C1R(unsigned char const*, int, unsigned char*, int, CvSize, int)' grfmt_bmp.cpp:(.text._ZN2cv10BmpDecoder8readDataERNS_3MatE+0x8dc): undefined reference toicvCvt_BGRA2BGR_8u_C4C3R的未定义引用(无符号字符const*,int,无符号字符*,int、CvSize,int)'grfmt_bmp.cpp:(.text._ZN2cv10BmpDecoder8readDataERNS_3MatE+0x94c):对icvCvt_BGRA2Gray_8u_C4C1R(unsigned char const*, int, unsigned char*, int, CvSize, int)' grfmt_bmp.cpp:(.text._ZN2cv10BmpDecoder8readDataERNS_3MatE+0xa2c): undefined reference toFillUniColor的未定义引用(无符号字符*、无符号字符*&、int、int、int&,int、PaletteEntry)'grfmt_bmp.cpp:(.text._ZN2cv10BmpDecoder8readDataERNS_3MatE+0xaba):对FillColorRow8(unsigned char*, unsigned char*, int, PaletteEntry*)' grfmt_bmp.cpp:(.text._ZN2cv10BmpDecoder8readDataERNS_3MatE+0xb4a): undefined reference toFillUniGray的未定义引用(无符号字符*、无符号字符*&、int、int、int&,int、int,无符号字符)'grfmt_bmp.cpp:(.text._ZN2cv10BmpDecoder8readDataERNS_3MatE+0kbad):对FillUniColor(unsigned char*, unsigned char*&, int, int, int&, int, int, PaletteEntry)' grfmt_bmp.cpp:(.text._ZN2cv10BmpDecoder8readDataERNS_3MatE+0xc15): undefined reference toFillGrayRow8的未定义引用(unsigned char*,unsigned char*,int,unsignedchar*)'grfmt_bmp.cpp:(.text._ZN2cv10BmpDecoder8readDataERNS_3MatE+0xc46):对FillUniGray(unsigned char*, unsigned char*&, int, int, int&, int, int, unsigned char)' grfmt_bmp.cpp:(.text._ZN2cv10BmpDecoder8readDataERNS_3MatE+0xe18): undefined reference toFillColorRow4的未定义引用(unsigned char*,unsigned char*,int,PaletteEntry*)'grfmt_bmp.cpp:(.text._ZN2cv10BmpDecoder8readDataERNS_3MatE+0xe6a):对FillUniColor(unsigned char*, unsigned char*&, int, int, int&, int, int, PaletteEntry)' grfmt_bmp.cpp:(.text._ZN2cv10BmpDecoder8readDataERNS_3MatE+0xeb3): undefined reference toFillUniGray的未定义引用(无符号字符*、无符号字符*&、int、int、int&,int、int,无符号字符)'grfmt_bmp.cpp:(.text._ZN2cv10BmpDecoder8readDataERNS_3MatE+0xeb):对FillGrayRow4(unsigned char*, unsigned char*, int, unsigned char*)' ./lib/libbasmk.a(grfmt_jpeg.cpp.o): In functioncv::JpegDecoder::readData(cv::Mat&)'的未定义引用:grfmt_jpeg.cpp:(.text._ZN2cv11JpegDecoder8readDataERNS_3MatE+0x1b4):对icvCvt_CMYK2BGR_8u_C4C3R(unsigned char const*, int, unsigned char*, int, CvSize)' grfmt_jpeg.cpp:(.text._ZN2cv11JpegDecoder8readDataERNS_3MatE+0x221): undefined reference toicvCvt_CMYK2Gray_8u_C4C1R的未定义引用(无符号字符const*,int,无符号字符*,int、CvSize)'grfmt_jpeg.cpp:(.text._ZN2cv11JpegDecoder8readDataERNS_3MatE+0x254):对icvCvt_BGR2RGB_8u_C3R(unsigned char const*, int, unsigned char*, int, CvSize)' ./lib/libbasmk.a(grfmt_jpeg.cpp.o): In functioncv::JpegEncoder::write(cv::Mat const&,std::vector>const&的未定义引用':grfmt_jpeg.cpp:(.text._ZN2cv11JpegEncoder5writeERKNS_3MatERKSt6vectorIiSaIiEE+0x49a):对icvCvt_BGR2RGB_8u_C3R(unsigned char const*, int, unsigned char*, int, CvSize)' grfmt_jpeg.cpp:(.text._ZN2cv11JpegEncoder5writeERKNS_3MatERKSt6vectorIiSaIiEE+0x510): undefined reference toicvCvt_BGRA2BGR_8u_C4C3R的未定义引用(无符号字符const*,int,无符号字符*,int、CvSize,int)'./lib/libbasmk.a(grfmt_pxm.cpp.o):在函数cv::PxMEncoder::write(cv::Mat const&, std::vector<int, std::allocator<int> > const&)': grfmt_pxm.cpp:(.text._ZN2cv10PxMEncoder5writeERKNS_3MatERKSt6vectorIiSaIiEE+0x437): undefined reference toicvCvt_BGR2RGB_16u_C3R(无符号短const*,int,无符号短*,int、CvSize)'grfmt_pxm.cpp:(.text._ZN2cv10PxMEncoder5writeERKNS_3MatERKSt6vectorIiSaIiEE+0x539):对icvCvt_BGR2RGB_8u_C3R(unsigned char const*, int, unsigned char*, int, CvSize)' ./lib/libbasmk.a(grfmt_pxm.cpp.o): In functioncv::PxMDecoder::readData(cv::Mat&)'的未定义引用:grfmt_pxm.cpp:(.text._ZN2cv10PxMDecoder8readDataERNS_3MatE+0x30d):对FillGrayPalette(PaletteEntry*, int, bool)' grfmt_pxm.cpp:(.text._ZN2cv10PxMDecoder8readDataERNS_3MatE+0x410): undefined reference toicvCvt_BGR2RGB_8u_C3R的未定义引用(无符号字符const*、int、无符号字符*、int和CvSize)'grfmt_pxm.cpp:(.text._ZN2cv10PxMDecoder8readDataERNS_3MatE+0x4ee):对icvCvt_BGR2Gray_8u_C3C1R(unsigned char const*, int, unsigned char*, int, CvSize, int)' grfmt_pxm.cpp:(.text._ZN2cv10PxMDecoder8readDataERNS_3MatE+0x5af): undefined reference toicvCvt_BGR2RGB_16u_C3R的未定义引用(无符号短常量*,int,无符号短*,int、CvSize)'grfmt_pxm.cpp:(.text._ZN2cv10PxMDecoder8readDataERNS_3MatE+0x60c):对icvCvt_BGRA2Gray_16u_CnC1R(unsigned short const*, int, unsigned short*, int, CvSize, int, int)' grfmt_pxm.cpp:(.text._ZN2cv10PxMDecoder8readDataERNS_3MatE+0x6fa): undefined reference toFillGrayRow1的未定义引用(unsigned char*,unsigned char*,int,unsignedchar*)'grfmt_pxm.cpp:(.text._ZN2cv10PxMDecoder8readDataERNS_3MatE+0x766):对FillColorRow8(unsigned char*, unsigned char*, int, PaletteEntry*)' grfmt_pxm.cpp:(.text._ZN2cv10PxMDecoder8readDataERNS_3MatE+0x7a9): undefined reference toFillColorRow1的未定义引用(unsigned char*,unsigned char*,int,PaletteEntry*)'grfmt_pxm.cpp:(.text._ZN2cv10PxMDecoder8readDataERNS_3MatE+0x7d1):对FillGrayRow8(unsigned char*, unsigned char*, int, unsigned char*)' ./lib/libbasmk.a(grfmt_sunras.cpp.o): In functioncv::SunRasterDecoder::readHeader()'的未定义引用:grfmt_sunras.cpp:(.text._ZN2cv16SunRasterDecoder10readHeaderEv+0x248):对IsColorPalette(PaletteEntry*, int)' grfmt_sunras.cpp:(.text._ZN2cv16SunRasterDecoder10readHeaderEv+0x278): undefined reference toFillGrayPattette(PaletteEntry*,int,bool)的未定义引用'./lib/libbasmk.a(grfmt_sunras.cpp.o):在函数cv::SunRasterDecoder::readData(cv::Mat&)': grfmt_sunras.cpp:(.text._ZN2cv16SunRasterDecoder8readDataERNS_3MatE+0x2ea): undefined reference toFillGrayRow1(unsigned char*,unsigned char*,int,unsignedchar*)'grfmt_sunras.cpp:(.text._ZN2cv16SunRasterDecoder8readDataERNS_3MatE+0x37c):对FillGrayRow8(unsigned char*, unsigned char*, int, unsigned char*)' grfmt_sunras.cpp:(.text._ZN2cv16SunRasterDecoder8readDataERNS_3MatE+0x3ca): undefined reference toFillColorRow8的未定义引用(unsigned char*,unsigned char*,int,PaletteEntry*)'grfmt_sunras.cpp:(.text._ZN2cv16SunRasterDecoder8readDataERNS_3MatE+0x41a):对FillColorRow1(unsigned char*, unsigned char*, int, PaletteEntry*)' grfmt_sunras.cpp:(.text._ZN2cv16SunRasterDecoder8readDataERNS_3MatE+0x45e): undefined reference toCvtPaletteToGray的未定义引用(PaletteEntry const*,unsigned char*,int)'grfmt_sunras.cpp:(.text._ZN2cv16SunRasterDecoder8readDataERNS_3MatE+0x4e2):对icvCvt_BGRA2BGR_8u_C4C3R(unsigned char const*, int, unsigned char*, int, CvSize, int)' grfmt_sunras.cpp:(.text._ZN2cv16SunRasterDecoder8readDataERNS_3MatE+0x573): undefined reference toicvCvt_BGRA2Gray_8u_C4C1R的未定义引用(无符号字符const*,int,无符号字符*,int、CvSize,int)'grfmt_sunras.cpp:(.text._ZN2cv16SunRasterDecoder8readDataERNS_3MatE+0x641):对icvCvt_BGR2Gray_8u_C3C1R(unsigned char const*, int, unsigned char*, int, CvSize, int)' fmt_sunras.cpp:(.text._ZN2cv16SunRasterDecoder8readDataERNS_3MatE+0x677): undefined reference toicvCvt_BGR2RGB_8u_C3R的未定义引用(无符号字符const*、int、无符号字符*、int和CvSize)%ngrfmt_sunras.cpp:(.text._ZN2cv16SunRasterDecoder8readDataERNS_3MatE+0x757):对FillColorRow8(unsigned char*, unsigned char*, int, PaletteEntry*)' grfmt_sunras.cpp:(.text._ZN2cv16SunRasterDecoder8readDataERNS_3MatE+0x7bc): undefined reference toFillUniColor(无符号字符*、无符号字符*&、int、int、int&,int、int,PaletteEntry)的未定义引用'grfmt_sunras.cpp:(.text._ZN2cv16SunRasterDecoder8readDataERNS_3MatE+0x85d):对FillGrayRow8(unsigned char*, unsigned char*, int, unsigned char*)' grfmt_sunras.cpp:(.text._ZN2cv16SunRasterDecoder8readDataERNS_3MatE+0x898): undefined reference toFillUniGray的未定义引用(无符号字符*、无符号字符*&、int、int、int&,int、int,无符号字符)'grfmt_sunras.cpp:(.text._ZN2cv16SunRasterDecoder8readDataERNS_3MatE+0x985):对FillColorRow1(unsigned char*, unsigned char*, int, PaletteEntry*)' grfmt_sunras.cpp:(.text._ZN2cv16SunRasterDecoder8readDataERNS_3MatE+0x9df): undefined reference toFillGrayRow1的未定义引用(unsigned char*,unsigned char*,int,unsignedchar*)'./lib/libbasmk.a(grfmt_tiff.cpp.o):在函数cv::TiffDecoder::readData(cv::Mat&)': grfmt_tiff.cpp:(.text._ZN2cv11TiffDecoder8readDataERNS_3MatE+0x600): undefined reference to中icvCvt_BGRA2Gray_8u_C4C1R(unsigned char const*,int,unsigned char*,int、CvSize,int)'grfmt_tiff.cpp:(.text._ZN2cv11TiffDecoder8readDataERNS_3MatE+0x67e):对icvCvt_BGRA2BGR_8u_C4C3R(unsigned char const*, int, unsigned char*, int, CvSize, int)' grfmt_tiff.cpp:(.text._ZN2cv11TiffDecoder8readDataERNS_3MatE+0x792): undefined reference toicvCvt_BGRA2BGR_16u_C4C3R的未定义引用(无符号短常量*,int,无符号短*,int、CvSize,int)'grfmt_tiff.cpp:(.text._ZN2cv11TiffDecoder8readDataERNS_3MatE+0x823):对icvCvt_BGRA2Gray_16u_CnC1R(unsigned short const*, int, unsigned short*, int, CvSize, int, int)' grfmt_tiff.cpp:(.text._ZN2cv11TiffDecoder8readDataERNS_3MatE+0x8b9): undefined reference toicvCvt_BGR2RGB_16u_C3R(无符号短常量*,int,无符号短*,int、CvSize)的未定义引用grfmt_tiff.cpp:(.text._ZN2cv11TiffDecoder8readDataERNS_3MatE+0x917):未定义对icvCvt_Gray2BGR_16u_C1C3R(unsigned short const*, int, unsigned short*, int, CvSize)' ./lib/libbasmk.a(grfmt_tiff.cpp.o): In function的引用cv::TiffEncoder::writeLibTiff(cv::Mat const&,std::vector>const&':grfmt_tiff.cpp:(.text._ZN2cv11TiffEncoder12writeLibTiffERKNS_3MatERKSt6vectorIiSaIiEE+0x432):对icvCvt_BGR2RGB_8u_C3R(unsigned char const*, int, unsigned char*, int, CvSize)' grfmt_tiff.cpp:(.text._ZN2cv11TiffEncoder12writeLibTiffERKNS_3MatERKSt6vectorIiSaIiEE+0x488): undefined reference toicvCvt_BGRA2RGBA_8u_C4R的未定义引用(无符号字符const*,int,无符号字符*,int、CvSize)'grfmt_tiff.cpp:(.text._ZN2cv11TiffEncoder12writeLibTiffERKNS_3MatERKSt6vectorIiSaIiEE+0x4d2):对icvCvt_BGR2RGB_16u_C3R(unsigned short const*, int, unsigned short*, int, CvSize)' grfmt_tiff.cpp:(.text._ZN2cv11TiffEncoder12writeLibTiffERKNS_3MatERKSt6vectorIiSaIiEE+0x51c): undefined reference toicvCvt_BGRA2RGBA_16u_C4R的未定义引用(无符号短常量*,int,无符号短*,int、CvSize)'./lib/libbasmk.a(grfmt_tiff.cpp.o):在函数cv::TiffEncoder::write(cv::Mat const&, std::vector<int, std::allocator<int> > const&)': grfmt_tiff.cpp:(.text._ZN2cv11TiffEncoder5writeERKNS_3MatERKSt6vectorIiSaIiEE+0x358): undefined reference toicvCvt_BGR2RGB_8u_C3R(unsigned char const*,int,unsigned char*,int、CvSize)'grfmt_tiff.cpp:(.text._ZN2cv11TiffEncoder5writeERKNS_3MatERKSt6vectorIiSaIiEE+0x6e0):对icvCvt_BGRA2RGBA_8u_C4R(unsigned char const*, int, unsigned char*, int, CvSize)' grfmt_tiff.cpp:(.text._ZN2cv11TiffEncoder5writeERKNS_3MatERKSt6vectorIiSaIiEE+0x733): undefined reference toicvCvt_BGR2RGB_16u_C3R的未定义引用(无符号短常量*,int,无符号短*,int、CvSize)'grfmt_tiff.cpp:(.text._ZN2cv11TiffEncoder5writeERKNS_3MatERKSt6vectorIiSaIiEE+0x794):对`icvCvt_BGRA2RGBA_16u_C4R(无符号短常量*,int,无符号短*,int、CvSize)'的未定义引用

opencv_imgprocopencv_highgui模块具有相同名称的源文件(例如util.cpp)。来自opencv_highgui的对象文件util.o被来自opencv_imgproc的具有相同名称的对象文件覆盖。这就是你出现链接错误的原因。

尝试使用AR工具的MRI脚本模式。创建一个MRI脚本文件(例如script.mri),其中包含以下内容:

create libnew.a
addlib libopencv_core.a
addlib libopencv_imgproc.a
addlib libopencv_highgui.a
addlib libmyown.a
save
end

并与ar工具配合使用

ar -M <script.mri

最新更新