代码之家  ›  专栏  ›  技术社区  ›  zerkms

gcc、64位、oracle、solaris

  •  1
  • zerkms  · 技术社区  · 14 年前
    info@s490up # gcc -std=gnu99 -o bla -g -O2 -DSunOS=1 -D_FILE_OFFSET_BITS=64 -D_LARGE_FILES= -I/usr/include/libxml2 -I/u/app/oracle/product/11.2/rdbms/demo -I/u/app/oracle/product/11.2/rdbms/public -I/u/app/oracle/product/11.2/rdbms/demo -I/u/app/oracle/product/11.2/rdbms/public blabla.c -lclntsh -lrt -lresolv -lnsl -lsocket -lm -lpthread -liconv -L/usr/lib -R/usr/lib -lxml2 -lz -lpthread -lm -lsocket -lnsl -L/u/app/oracle/product/11.2/lib
    ld: fatal: file /u/app/oracle/product/11.2/lib/libclntsh.so: wrong ELF class: ELFCLASS64
    ld: fatal: File processing errors. No output written to bla
    collect2: ld returned 1 exit status
    

    ld

    (这长命令是从 configure 由于此错误,执行不正确)

    升级版

    file /u/app/oracle/product/11.2/lib/libclntsh.so
    /u/app/oracle/product/11.2/lib/libclntsh.so:    ELF 64-bit MSB dynamic lib SPARCV9 Version 1, dynamically linked, not stripped
    

    这个 blabla.c :

    info@s490up # cat /tmp/blabla.c
    /* confdefs.h.  */
    #define PACKAGE_NAME ""
    #define PACKAGE_TARNAME ""
    #define PACKAGE_VERSION ""
    #define PACKAGE_STRING ""
    #define PACKAGE_BUGREPORT ""
    #define GW_NAME "Kannel"
    #define GW_VERSION "1.4.3"
    #define VERSION "1.4.3"
    #define YYTEXT_POINTER 1
    #define _FILE_OFFSET_BITS 64
    #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 SIZEOF_SHORT 2
    #define SIZEOF_INT 4
    #define SIZEOF_LONG 4
    #define SIZEOF_LONG_LONG 8
    #define HAVE_LIBM 1
    #define HAVE_LIBSOCKET 1
    #define HAVE_LIBNSL 1
    #define HAVE_LIBRESOLV 1
    #define STDC_HEADERS 1
    #define HAVE_SYS_IOCTL_H 1
    #define HAVE_SYS_TIME_H 1
    #define HAVE_SYS_TYPES_H 1
    #define HAVE_UNISTD_H 1
    #define HAVE_SYS_POLL_H 1
    #define HAVE_PTHREAD_H 1
    #define HAVE_GETOPT_H 1
    #define HAVE_SYSLOG_H 1
    #define HAVE_ICONV_H 1
    #define HAVE_ZLIB_H 1
    #define HAVE_STDLIB_H 1
    #define HAVE_SYS_SOCKET_H 1
    #define HAVE_SYS_SOCKIO_H 1
    #define HAVE_NETINET_IN_H 1
    #define HAVE_NET_IF_H 1
    #define HAVE___FUNCTION__ 1
    #define HAVE___FUNC__ 1
    #define HAVE_GETTIMEOFDAY 1
    #define HAVE_SELECT 1
    #define HAVE_SOCKET 1
    #define HAVE_STRDUP 1
    #define HAVE_GETOPT_LONG 1
    #define HAVE_LOCALTIME_R 1
    #define HAVE_GMTIME_R 1
    #define HAVE_SRANDOM 1
    #define HAVE_FUNC_GETHOSTBYNAME_R_5 1
    #define HAVE_SOCKLEN_T 1
    #define HAVE_GETOPT_IN_STDIO_H 1
    #define HAVE_REGEX_H 1
    #define HAVE_REGEX 1
    #define HAVE_PTHREAD_SPINLOCK_T 1
    #define HAVE_PTHREAD_RWLOCK 1
    #define HAVE_LIBRT 1
    #define HAVE_SEMAPHORE 1
    #define SUFFIX ""
    #define USE_GWMEM_NATIVE 1
    #define LOG_TIMESTAMP_LOCALTIME 1
    #define ENABLE_COOKIES 1
    #define USE_KEEPALIVE 1
    /* 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 OCIEnvCreate ();
    int
    main ()
    {
    return OCIEnvCreate ();
      ;
      return 0;
    }
    
    1 回复  |  直到 14 年前
        1
  •  2
  •   t0mm13b    14 年前

    libclntsh.so 是一个64位二进制库,您正在用32位代码链接它。检查以确保您拥有正确的库。

    编辑:

    ELF 64位MSB动态库SPARCV9 版本1,动态链接,非 剥离

    gcc64位工具链在与Sparc平台上构建的库进行链接时遇到问题,这可能意味着两件事之一

    • 忍耐?有一件事还不清楚, 你在哪个平台下运行gcc工具链?
    • 发出此命令 gcc --version file /usr/bin/gcc 确定可执行文件的二进制类型。并将结果与库的二进制类型进行比较。。。