1. This site uses cookies. By continuing to use this site, you are agreeing to our use of cookies. Learn More.

/usr/bin/ld: cannot find -lgcrypt

Discussion in 'Userland Programming and Scripting' started by kenorb, Dec 6, 2010.

  1. kenorb

    kenorb New Member

    Messages:
    330
    Likes Received:
    0
    Code:
    > gcc -o conftest -I/usr/local/include conftest.c -lgcrypt
    /usr/bin/ld: cannot find -lgcrypt
    > ldconfig -r | grep gcrypt
    	308:-lgcrypt.17 => /usr/local/lib/libgcrypt.so.17
    	890:-lgcrypt.16 => /usr/local/lib/compat/pkg/libgcrypt.so.16
    > ldd /usr/local/lib/libgcrypt.so.17
    /usr/local/lib/libgcrypt.so.17:
    	libgpg-error.so.0 => /usr/local/lib/libgpg-error.so.0 (0x800c00000)
    	libintl.so.9 => /usr/local/lib/libintl.so.9 (0x800d04000)
    	libiconv.so.3 => /usr/local/lib/libiconv.so.3 (0x800e0d000)
    	libc.so.7 => /lib/libc.so.7 (0x800645000)
    > pkg_info | grep gcrypt
    libgcrypt-1.4.6     General purpose crypto library based on code used in GnuPG
    
    Tried to reinstall libgcrypt, nothing.

    Simply don't understand why FreeBSD don't allow me to compile simple code with -lgcrypt, even if it's installed and loaded.
     
  2. kenorb

    kenorb New Member

    Messages:
    330
    Likes Received:
    0
    Test file from configure:
    Code:
    /* confdefs.h */
    #define PACKAGE_NAME "libimobiledevice"
    #define PACKAGE_TARNAME "libimobiledevice"
    #define PACKAGE_VERSION "1.0.4"
    #define PACKAGE_STRING "libimobiledevice 1.0.4"
    #define PACKAGE_BUGREPORT "nospam@nowhere.com"
    #define PACKAGE_URL ""
    #define PACKAGE "libimobiledevice"
    #define VERSION "1.0.4"
    #define STDC_HEADERS 1
    #define HAVE_SYS_TYPES_H 1
    #define HAVE_SYS_STAT_H 1
    #define HAVE_STDLIB_H 1
    #define HAVE_STRING_H 1
    #define HAVE_MEMORY_H 1
    #define HAVE_STRINGS_H 1
    #define HAVE_INTTYPES_H 1
    #define HAVE_STDINT_H 1
    #define HAVE_UNISTD_H 1
    #define HAVE_DLFCN_H 1
    #define LT_OBJDIR ".libs/"
    /* end confdefs.h.  */
    
    /* Override any GCC internal prototype to avoid an error.
       Use char because int might match the return type of a GCC
       builtin and then its argument prototype would still apply.  */
    #ifdef __cplusplus
    extern "C"
    #endif
    char gcry_control ();
    int
    main ()
    {
    return gcry_control ();
      ;
      return 0;
    }
    
    Code:
    > gcc -o blah -I/usr/local/include blah.c -lgcrypt
    /usr/bin/ld: cannot find -lgcrypt
    
     
  3. SirDice

    SirDice Moderator Staff Member Moderator

    Messages:
    17,375
    Likes Received:
    3
    % gcc -o blah -I/usr/local/include/ -L/usr/local/libs/ -lgcrypt blah.c
     
  4. kenorb

    kenorb New Member

    Messages:
    330
    Likes Received:
    0
    Sorry, the same:

    Code:
    > gcc -o blah -I/usr/local/include/ -L/usr/local/libs/ -lgcrypt blah.c
    /usr/bin/ld: cannot find -lgcrypt
    
     
  5. expl

    expl New Member

    Messages:
    664
    Likes Received:
    0
    It is -L/usr/local/lib/ not -L/usr/local/libs/
     
  6. kenorb

    kenorb New Member

    Messages:
    330
    Likes Received:
    0
    Does work, thank you:)
    What I've to do to be visible by default?
    Shouldn't ldconfig provide final list of available and working options?


    Code:
    > gcc -print-search-dirs
    install: /usr/libexec/
    programs: =/usr/bin/:/usr/bin/:/usr/libexec/:/usr/libexec/:/usr/libexec/
    libraries: =/usr/lib/:/usr/lib/
    > gcc -v -lgcrypt
    Using built-in specs.
    Target: amd64-undermydesk-freebsd
    Configured with: FreeBSD/amd64 system compiler
    Thread model: posix
    gcc version 4.2.1 20070719  [FreeBSD]
     /usr/bin/ld --eh-frame-hdr -V -dynamic-linker /libexec/ld-elf.so.1 /usr/lib/crt1.o /usr/lib/crti.o /usr/lib/crtbegin.o -L/usr/lib -L/usr/lib -lgcrypt -lgcc --as-needed -lgcc_s --no-as-needed -lc -lgcc --as-needed -lgcc_s --no-as-needed /usr/lib/crtend.o /usr/lib/crtn.o
    GNU ld version 2.15 [FreeBSD] 2004-05-23
      Supported emulations:
       elf_i386_fbsd
       elf_x86_64_fbsd
    /usr/bin/ld: cannot find -lgcrypt
    
     
  7. SirDice

    SirDice Moderator Staff Member Moderator

    Messages:
    17,375
    Likes Received:
    3
    Oops.. Typo..
     
  8. expl

    expl New Member

    Messages:
    664
    Likes Received:
    0
    LD will not check 3rd party lib path (/usr/local/lib) only native library path (/usr/lib) by default.
     
  9. kenorb

    kenorb New Member

    Messages:
    330
    Likes Received:
    0
    Tried to made workaround by:
    Code:
    sudo ln -s /usr/local/lib/libgcrypt.so.17 /usr/lib/libgcrypt.so.17 && sudo ldconfig -R
    But doesn't work as expected;/
    Is there any FreeBSD version of ld.so.conf?

    Found this:
    http://lists.freebsd.org/pipermail/freebsd-hackers/2003-June/001746.html

    But gcc don't load that.
     
  10. expl

    expl New Member

    Messages:
    664
    Likes Received:
    0
    Thats because you need libgcrypt.a for linking, libgcrypt.so.x is for dynamic loading.
     
  11. kenorb

    kenorb New Member

    Messages:
    330
    Likes Received:
    0
    My configure script solved as well by following LDFLAGS:
    Code:
    > ./configure LDFLAGS="-L/usr/local/lib/"