Undefined reference mingw cross compilation
Bonjour à tous,
Lors de la phase de link d'une librairie dynamique utilisant libsndfile(le stack est mingw64 sur un ubuntu64, la compilation a windows comme target), je suis confronté à une référence indéfinie:
Code:
1 2 3 4 5 6 7
|
Linking CXX shared library /home/moussa/dev/prj/module-audio-openal-native/target/classes/win64/libyildizopenal.dll
CMakeFiles/yildizopenal.dir/objects.a(AlBuffer.cpp.obj):AlBuffer.cpp:(.text+0x197): référence indéfinie vers « sf_open_virtual »
CMakeFiles/yildizopenal.dir/objects.a(AlBuffer.cpp.obj):AlBuffer.cpp:(.text+0x329): référence indéfinie vers « sf_open »
CMakeFiles/yildizopenal.dir/objects.a(AlBuffer.cpp.obj):AlBuffer.cpp:(.text+0x4a5): référence indéfinie vers « sf_read_short »
CMakeFiles/yildizopenal.dir/objects.a(AlBuffer.cpp.obj):AlBuffer.cpp:(.text+0x52e): référence indéfinie vers « sf_read_short »
collect2: error: ld returned 1 exit status |
la librairie libsndfile.dll.a est bien trouvée, et il n'y a pas de dépendance cyclique ni de dépendance d'ordre(testé en retirant les autres librairies).
Voici ce qui me semble problématique:
nm sur object.a
Code:
1 2 3 4 5
|
AlBuffer.cpp.obj:
U _sf_open
U _sf_open_virtual
U _sf_read_short |
nm sur libsndfile.dll.a
Code:
1 2 3 4 5 6 7 8 9 10
|
d000013.o:
U _head_libsndfile_1_dll
0000000000000000 i .idata$4
0000000000000000 i .idata$5
0000000000000000 i .idata$6
0000000000000000 i .idata$7
0000000000000000 I __imp_sf_open
0000000000000000 T sf_open
0000000000000000 t .text |
On peut voir que object.a s'attend à trouver _sf_open alors que libsnd expose sf_open sans _ au début.
De ce que j'en ai compris ce serait une sombre histoire de cedcl vs stdcall mais je dois dire que tout ceci reste très flou pour moi
Quelqu'un aurait des précisions là-dessus?
Merci d'avance