Я пытаюсь построить проект с использованием OpenCV с алхимией.Моя идея заключалась в том, чтобы изолировать нужные мне части от OpenCV (v.2.2), скомпилировать их с помощью алхимии g ++ и статически связать с моим кодом.Итак, вот что я делаю:
Сначала я скомпилирую необходимые исходные коды opencv один за другим (мне нужно core, imgproc и некоторые другие):
alc-on; for src in *.cpp ; do g++ -I../../include -DOSX -c -Wall -O3 -o ${PWD##*/}_`basename $src .cpp`.o $src ; done ; mv -v *.o ~/dev/cut/obj/
Затем я пытаюсь построить этот простой тестFlash - взаимодействие OpenCV и связывание его со всеми .o, которые я построил, как указано выше:
#include <opencv/cv.h>
#include "AS3.h"
void testCV()
{
cv::Mat a(3,3,CV_8UC1,cv::Scalar(1.0));
cv::Mat b(3,3,CV_8UC1,cv::Scalar(2.0));
cv::Mat c;
c=a+b;
}
static AS3_Val test(void* self, AS3_Val args)
{
testCV();
return 0;
}
int main()
{
AS3_Val testMethod = AS3_Function(NULL,test);
AS3_Val result = AS3_Object("test: AS3ValType",testMethod);
AS3_Release(testMethod);
AS3_LibInit(result);
return 0;
}
Далее, предполагая, что у меня есть исходный код и все необходимые .o в одной папке, я пытаюсь скомпилировать их как SWC:
g++ -I../include -Wall -O3 -DOSX -swc test_cv.cpp *.o -o cvtest.swc
(Примечание: создание архива библиотеки с 'ar rc' и 'ranlib' и связывание с ним имеет тот же эффект)
И на этом этапе я получаю следующеесообщение об ошибке из инструментов алхимии (думаю, это llvm):
Assertion failed: (TLI.isTypeLegal(VT) && "Intrinsic uses a non-legal type?"), function visitTargetIntrinsic, file /Volumes/data/dev/FlaCC/llvm-2.1/lib/CodeGen/SelectionDAG/SelectionDAGISel.cpp, line 2465.
0 llc 0x00636dfe _ZNSt8_Rb_treeIN4llvm3sys4PathES2_St9_IdentityIS2_ESt4lessIS2_ESaIS2_EE13insert_uniqueERKS2_ + 6078
1 llc 0x006373a2 _ZNSt8_Rb_treeIN4llvm3sys4PathES2_St9_IdentityIS2_ESt4lessIS2_ESaIS2_EE13insert_uniqueERKS2_ + 7522
2 libSystem.B.dylib 0x9125e05b _sigtramp + 43
3 ??? 0xffffffff 0x0 + 4294967295
4 libSystem.B.dylib 0x912eb5a5 raise + 26
5 libSystem.B.dylib 0x913016e4 abort + 93
6 libSystem.B.dylib 0x912ee20f __assert_rtn + 252
7 llc 0x003f3e2a _ZN4llvm11StoreSDNodeD1Ev + 90026
8 llc 0x003f5256 _ZN4llvm11StoreSDNodeD1Ev + 95190
9 llc 0x003f817c _ZN4llvm11StoreSDNodeD1Ev + 107260
10 llc 0x0040bc68 _ZN4llvm11StoreSDNodeD1Ev + 187880
11 llc 0x0040d3f2 _ZN4llvm11StoreSDNodeD1Ev + 193906
12 llc 0x0040f92e _ZN4llvm11StoreSDNodeD1Ev + 203438
13 llc 0x005d1926 _ZN4llvm12FunctionPassD1Ev + 20998
14 llc 0x005d1f3a _ZN4llvm12FunctionPassD1Ev + 22554
15 llc 0x005d20c5 _ZN4llvm12FunctionPassD1Ev + 22949
16 llc 0x00002e44 0x0 + 11844
17 llc 0x00001f36 0x0 + 7990
18 ??? 0x00000006 0x0 + 6
Я обнаружил, что проблема связана с файлом matop.o (matop.cpp из основного модуля OpenCV), но я не могу его выброситьсвязывания, потому что это приводит к неопределенной ошибке sym во время выполнения во flash (он не может найти cv :: add, если я не ошибаюсь).
Может кто-нибудь предложить какой-либо способ определить реальную проблему и любой (дажегрязный хакинг - стиль) как это обойти?
Моя тема по проблеме и обходным путям на форумах по алобской темноте: http://forums.adobe.com/message/3891743#3891743