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:
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).
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
Voici ce qui me semble problématique:
nm sur object.a
nm sur libsndfile.dll.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
On peut voir que object.a s'attend à trouver _sf_open alors que libsnd expose sf_open sans _ au début.
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
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
Partager