xcode - Automatiseret kryds kompilering og sammenkædning af statiske OpenCV biblioteker

Indlæg af Hanne Mølgaard Plasc

Problem



Jeg byggede OpenCV med følgende på ubuntu:


cmake -D CMAKE\_BUILD\_TYPE=RELEASE 
    -D BUILD\_SHARED\_LIBS=OFF 
    -D CMAKE\_INSTALL\_PREFIX=/usr/local 
    -D BUILD\_opencv\_python2=OFF 
    -D BUILD\_opencv\_python3=OFF 
    -D INSTALL\_PYTHON\_EXAMPLES=OFF 
    -D INSTALL\_C\_EXAMPLES=OFF 
    -D BUILD\_JAVA=OFF 
    -D BUILD\_TESTS=OFF 
    -D BUILD\_ZLIB=ON 
    -D BUILD\_TIFF=ON 
    -D BUILD\_JASPER=ON 
    -D BUILD\_JPEG=ON 
    -D BUILD\_PNG=ON 
    -D BUILD\_OPENEXR=ON 
    -D BUILD\_WEBP=ON 
    -D BUILD\_EXAMPLES=OFF ..


Og naivt antaget, at cmake ville håndtere min testprograms linkplan automatisk. Men for at få mit automatiske port script til at arbejde, blev jeg tvunget til at forsøge at genoprette biblioteksbyggede variabler direkte fra cmake output for at rekonstruere de delte og statiske afhængigheder jeg havde brug for.


externalLibs=$(/bin/opencv\_version -v | grep ' Extra dependencies:' | cut -d':' -f2 | sed -r 's/( )+/ -l/g')
staticLibs=$(cat OpenCVModules.cmake | grep 'IMPORTED\_LOCATION\_RELEASE' | sed -r 's/IMPORTED\_LOCATION\_RELEASE//g' | sed -rz 's/[" 
]+/ /g' )
headers=$(cat OpenCVConfig.cmake | grep 'set(OpenCV\_INCLUDE\_DIRS ' | sed -r 's/set(OpenCV\_INCLUDE\_DIRS//g'  | sed -r 's/( ")+/ -I/g' | sed -r 's/[")]+//g' )


De problemer, jeg har stødt på (skærme af manglende refs som 'undefined reference to' cv :: softdouble :: operator/') synes ret dateret:
Udefinerede referencer i statiske OpenCV-biblioteker
Udefinerede referencer i statiske OpenCV-biblioteker
Og de løsninger, andre har brugt, synes brugsspecifikke:
https://forum.qt.io/topic/51543/solved-cannot-link-libs-statically
Hvorfor forårsager ordren, hvor biblioteker er forbundet, nogle gange fejl i GCC? [6]


Er der en bedre måde at importere og bygge et program mod et bestemt sæt af statiske opencv-biblioteker inden for cmake uden at installere arkitekturspecifikke build-versioner til at håndtere cmake-magien?


Eller gør folk faktisk manuelt linket de 20 nogle ulige libs ;-)


ar cr libopencv\_core.a myappobj.o


Enhver indsigt ville blive værdsat, da cmake-filerne blev komplicerede, da jeg også har til hensigt at statisk forbinde wxWidgets til det samme program. Jeg har lavet lidt fremskridt ved at konstruere de automatisk genererede cmake link.txt filer i opencv test applikationens build tree. Men der skal være en bedre metode til at gøre dette uden at vende tilbage til delte libs, der ikke altid krydser -platform venlige ... ;-)

Bedste reference