¿Libsasl2 está roto en OSX Yosemite? Falta sasl_client_done

He tenido algunos problemas con la versión instalada de libsasl2 (Cyrus SASL).

En particular, parece que los encabezados locales y la versión 2.1.26 del informe sasl_version, pero no se proporciona ningún símbolo para la función global sasl_client_done.

Estoy bastante seguro de que se supone que tengo ese símbolo porque:

Está allí en el encabezado sasl / sasl.h proporcionadoEl archivo NEWS de cyrsus sasl enumera "Implementado sasl_client_done () / sasl_server_done ()" como una característica 2.1.24Está allí en todas partes que proporciona 2.1.26 fuera de Yosemite

Para una reproducción:

tenga en cuenta que la siguiente muestra imprime"impl: 'Cyrus SASL', versión: 33619994, mayor: 2, menor: 1, paso: 26"la muestra se compila y ejecuta en una instalación de Linux con la misma versión de biblioteca después de descomentar el código

el código no comentado produce un error de enlace en yosemite

Undefined symbols for architecture x86_64:
  "_sasl_client_done", referenced from:
      _main in foo-072675.o
ld: symbol(s) not found for architecture x86_64
clang: error: linker command failed with exit code 1 (use -v to see invocation)

invocando el compilador con:

clang -Wall -Werror -lsasl2 -o foo foo.c -v

con clang -v de:

Apple LLVM version 6.0 (clang-600.0.54) (based on LLVM 3.5svn)
Target: x86_64-apple-darwin14.0.0
Thread model: posix
 "/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/clang" -cc1 -triple x86_64-apple-macosx10.10.0 -emit-obj -mrelax-all -disable-free -disable-llvm-verifier -main-file-name foo.c -mrelocation-model pic -pic-level 2 -mdisable-fp-elim -masm-verbose -munwind-tables -target-cpu core2 -target-linker-version 241.9 -v -resource-dir /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/../lib/clang/6.0 -isysroot /Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.10.sdk -Wall -Werror -fdebug-compilation-dir /Users/jcarey/work -ferror-limit 19 -fmessage-length 0 -stack-protector 1 -mstackrealign -fblocks -fobjc-runtime=macosx-10.10.0 -fencode-extended-block-signature -fdiagnostics-show-option -vectorize-slp -o /var/folders/wq/jypwqgv976n0db5l5qxw900r0000gq/T/foo-92054e.o -x c foo.c
clang -cc1 version 6.0 based upon LLVM 3.5svn default target x86_64-apple-darwin14.0.0
ignoring nonexistent directory "/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.10.sdk/usr/local/include"
ignoring nonexistent directory "/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.10.sdk/Library/Frameworks"
#include "..." search starts here:
#include <...> search starts here:
 /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/../lib/clang/6.0/include
 /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/include
 /Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.10.sdk/usr/include
 /Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.10.sdk/System/Library/Frameworks (framework directory)
End of search list.
 "/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/ld" -demangle -dynamic -arch x86_64 -macosx_version_min 10.10.0 -syslibroot /Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.10.sdk -o foo -lsasl2 /var/folders/wq/jypwqgv976n0db5l5qxw900r0000gq/T/foo-92054e.o -lSystem /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/../lib/clang/6.0/lib/darwin/libclang_rt.osx.a
Undefined symbols for architecture x86_64:
  "_sasl_client_done", referenced from:
      _main in foo-92054e.o
ld: symbol(s) not found for architecture x86_64
clang: error: linker command failed with exit code 1 (use -v to see invocation)

Y el código en cuestión:

#include <sasl/sasl.h>
#include <stdio.h>
#include <stdint.h>

int main(int argc, char ** argv) {
    const char *impl;
    int version;
    uint32_t buf;
    uint16_t major;
    uint8_t minor;
    uint8_t step;

    sasl_version(&impl, &version);

    buf = version;

    major = buf >> 24;
    minor = (buf << 8) >> 24;
    step = (buf << 24) >> 24;

    printf("impl: '%s', version: %d, major: %d, minor: %d, step: %d\n", impl, version, major, minor, step);

    /*
    {
        int (* scd)(void);

        scd = &sasl_client_done;

        printf("sasl_client_done: %p\n", scd);
    }
    */

    return 0;
}

Estoy pensando que algo está mal con la forma en que cyrus sasl fue empaquetado para Yosemite (¿quizás usando una lista de símbolos de Mavericks?).

Respuestas a la pregunta(1)

Su respuesta a la pregunta