[英]Linker errors in Android NDK (undefined reference to `__cxa_end_cleanup')
[英]Mysterious “undefined reference” linker errors
對於一個大學項目,我正在為Android設計手跟蹤算法。 阿爾格 主要使用OpenCV功能。 老實說,我不太了解這種藻類。 可以,但這不是我的問題。 因此,用於移植alg。 我從正常工作的Windows visual studio項目中將每個文件添加到我的android項目中,修復了此處和此處的一些編譯器警告和錯誤。 大多數情況下都是成功...不幸的是,有一個文件使我擔心了許多個小時。 編譯此文件將引發以下錯誤:
./obj/local/armeabi-v7a/libopencv_legacy.a(compat.o): In function `cvFindChessBoardCornerGuesses':
compat.cpp:(.text.cvFindChessBoardCornerGuesses+0x18): undefined reference to `cvFindChessboardCorners'
./obj/local/armeabi-v7a/libopencv_legacy.a(compat.o): In function `cvHoughLines':
compat.cpp:(.text.cvHoughLines+0x46): undefined reference to `cvHoughLines2'
./obj/local/armeabi-v7a/libopencv_legacy.a(compat.o): In function `cvHoughLinesSDiv':
compat.cpp:(.text.cvHoughLinesSDiv+0x54): undefined reference to `cvHoughLines2'
./obj/local/armeabi-v7a/libopencv_legacy.a(compat.o): In function `cvHoughLinesP':
compat.cpp:(.text.cvHoughLinesP+0x52): undefined reference to `cvHoughLines2'
./obj/local/armeabi-v7a/libopencv_legacy.a(compat.o): In function `cvCalcEMD':
compat.cpp:(.text.cvCalcEMD+0x44): undefined reference to `cvCalcEMD2'
collect2: ld returned 1 exit status
有趣的是,導致此錯誤的唯一行是
nPointsConnected ++;
注釋此行或減少nPointsConnected或設置類似nPointsConnected = 1的值會使鏈接器錯誤消失。
項目中還有其他文件,包括相同的OpenCV標頭,可以很好地進行編譯。 有人可以向我解釋一下嗎? 請...
編輯這是環繞代碼:
if ( minK > FINGERTIP_ANGLE_THRESHOLD && minDir > 0 )
{
nPointsGap = 0;
if ( nPointsConnected == 0 )
{
startIndex = i;
}
nPointsConnected ++;
if ( minAngle < minK )
{
minAngle = minK;
minPointIndex = i;
}
fConnected = true;
mediumIndex += ( minK * i );
meanPointX += ( minK * contour[i].x );
meanPointY += ( minK * contour[i].y );
sumAngle += minK;
if ( fScreenshot )
{
cvCircle( pScreenshot_curvature, cvPoint(contour[i].x*2, contour[i].y*2),
4, CV_RGB(255,255,0), -1, 8, 0 );
cvCircle( pScreenshot_ellipse, cvPoint(contour[i].x*2, contour[i].y*2),
4, CV_RGB(255,255,0), -1, 8, 0 );
}
}
看起來好像您最終從-lopencv_legacy
提取了compat.o
對象文件,並且好像該文件委托了另一個實現。 也就是說,您可能需要在-lopencv
之后指定-lopencv_legacy
。
我對Android或OpenCV一無所知,但這是錯誤消息的樣子。 除非nPointsConnected
是某種類類型,否則對導致問題的原因的描述看起來有些奇怪。 在這種情況下,可能是增量運算符僅在兼容性庫中實現,而其他操作在“實際”實現中可用。 在目標文件上使用nm
,您可以找到導致更改的未定義的其他符號,然后查看它們在哪個庫中定義。
只是為了澄清一下,因為這里的某些人認為問題不是導致此錯誤的遞增整數。 此外,它是在if條件內的方法調用
(nPointsConnected > SOMEVALUE)
我要做的是從以下位置更改OpenCV makefile中OpenCV模塊的順序
OPENCV_MODULES := contrib calib3d objdetect features2d video imgproc highgui ml legacy flann core ts
至
OPENCV_MODULES := contrib legacy objdetect calib3d features2d video highgui imgproc ml flann core
舊模塊是要替換的模塊。 (非常感謝來自android-opencv郵件列表的人指出了這一點)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.