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 : Sélectionner tout - Visualiser dans une fenêtre à part
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 : Sélectionner tout - Visualiser dans une fenêtre à part
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 : Sélectionner tout - Visualiser dans une fenêtre à part
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