2017-03-27 2 views
2

Lorsque vous liez dynamiquement une bibliothèque, vous pouvez indiquer un symbole de remplacement dans le cas où un élément est manquant au moment du chargement. Par exemple compiler un fichier MEX au lieu de mxCreateNumericArray Je voudrais appeler mxCreateUninitNumericArray (avec la même signature). Mais ce dernier ne sera pas présent pour les anciennes versions de MATLAB. Idem pour mxArrayToString et mxArrayToUTF8String.Fournir un symbole de remplacement pour la liaison dynamique

Pour MSVC, j'ai pu utiliser/DELAYLOAD et me connecter à __pfnDliFailureHook2 sur dliFailGetProc pour fournir un mappage simple. Mais que puis-je faire sur les systèmes basés sur Unix?

Comment se connecter à libld d'une manière similaire?

+0

peut-être [Comment faire faible travail de liaison avec GCC?] (Http: // stackoverflow.com/questions/274753/how-to-make-weak-linking-work-with-gcc) peut vous aider – Trilarion

Répondre

2

Je n'ai pas pu accrocher dans l'éditeur de liens dynamique, mais fournir des symboles faibles m'a aidé comme ça:

extern "C" 
char * __attribute__ ((weak)) mxArrayToUTF8String(mxArray const * array) 
{ 
    return mxArrayToString(array) ; 
}