我正在尝试用我自己的库打包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 to
FillColorRow1的未定义引用(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 to
icvCvt_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 to
FillColorRow4的引用(无符号字符*、无符号字符*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 to
FillColorRow8的引用(无符号字符*、无符号字符*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 to
icvCvt_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 to
icvCvt_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 to
icvCvt_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 to
FillUniColor的未定义引用(无符号字符*、无符号字符*&、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 to
FillUniGray的未定义引用(无符号字符*、无符号字符*&、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 to
FillGrayRow8的未定义引用(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 to
FillColorRow4的未定义引用(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 to
FillUniGray的未定义引用(无符号字符*、无符号字符*&、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 function
cv::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 to
icvCvt_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 function
cv::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 to
icvCvt_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 to
icvCvt_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 function
cv::PxMDecoder::readData(cv::Mat&)'的未定义引用:grfmt_pxm.cpp:(.text._ZN2cv10PxMDecoder8readDataERNS_3MatE+0x30d):对FillGrayPalette(PaletteEntry*, int, bool)'
grfmt_pxm.cpp:(.text._ZN2cv10PxMDecoder8readDataERNS_3MatE+0x410): undefined reference to
icvCvt_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 to
icvCvt_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 to
FillGrayRow1的未定义引用(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 to
FillColorRow1的未定义引用(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 function
cv::SunRasterDecoder::readHeader()'的未定义引用:grfmt_sunras.cpp:(.text._ZN2cv16SunRasterDecoder10readHeaderEv+0x248):对IsColorPalette(PaletteEntry*, int)'
grfmt_sunras.cpp:(.text._ZN2cv16SunRasterDecoder10readHeaderEv+0x278): undefined reference to
FillGrayPattette(PaletteEntry*,int,bool)的未定义引用'./lib/libbasmk.a(grfmt_sunras.cpp.o):在函数cv::SunRasterDecoder::readData(cv::Mat&)':
grfmt_sunras.cpp:(.text._ZN2cv16SunRasterDecoder8readDataERNS_3MatE+0x2ea): undefined reference to
FillGrayRow1(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 to
FillColorRow8的未定义引用(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 to
CvtPaletteToGray的未定义引用(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 to
icvCvt_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 to
icvCvt_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 to
FillUniColor(无符号字符*、无符号字符*&、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 to
FillUniGray的未定义引用(无符号字符*、无符号字符*&、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 to
FillGrayRow1的未定义引用(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 to
icvCvt_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 to
icvCvt_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 to
icvCvt_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 to
icvCvt_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 to
icvCvt_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 to
icvCvt_BGR2RGB_16u_C3R的未定义引用(无符号短常量*,int,无符号短*,int、CvSize)'grfmt_tiff.cpp:(.text._ZN2cv11TiffEncoder5writeERKNS_3MatERKSt6vectorIiSaIiEE+0x794):对`icvCvt_BGRA2RGBA_16u_C4R(无符号短常量*,int,无符号短*,int、CvSize)'的未定义引用
opencv_imgproc
和opencv_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