代码之家  ›  专栏  ›  技术社区  ›  Yuki.kuroshita

跳过不兼容的目录-gcc

  •  0
  • Yuki.kuroshita  · 技术社区  · 6 年前

    我尝试使用包中的一些库编译脚本,使用:

    gcc -g -o sac2mt5 sac2mt5.o libsac2mt5.a -L/home/yuki/sac/lib -lsacio -lm
    

    这就是我得到的错误:

    /usr/bin/ld: skipping incompatible /home/yuki/sac/lib/libsacio.a when searching for -lsacio
    /usr/bin/ld: cannot find -lsacio
    collect2: error: ld returned 1 exit status
    

    这里有什么问题?为什么这个库不兼容?为了避免这种情况,需要在标志中更改哪些内容?我只是想知道这是否是图书馆的问题,我对此无能为力,或者我是否做错了什么。

    谢谢你的帮助

    1 回复  |  直到 6 年前
        1
  •  2
  •   Mike Kinghan Luchian Grigore    6 年前

    图书馆 /home/yuki/sac/lib/libsacio.a 是为建筑而建的 与您试图链接程序的程序不兼容。 最可能的原因是库包含32位对象文件和 您正在尝试64位链接。下一个最有可能的是64位库 在32位链接中。

    cd 到运行此链接的目录,然后运行:

    $ objdump -f sac2mt5.o
    

    输出将包含以下格式的行:

    sac2mt5.o:  file format <...>
    architecture: <...>, flags 0x<...>:
    

    e、 g.(64位ELF):

    sac2mt5.o:     file format elf64-x86-64
    architecture: i386:x86-64, flags 0x00000010:
    

    或(32位ELF):

    sac2mt5.o:     file format elf32-i386
    architecture: i386, flags 0x00000010:
    

    这些将告诉您尝试链接的体系结构的名称( 系统的体系结构)及其对象文件格式的名称。

    $ objdump -f /home/yuki/sac/lib/libsacio.a
    

    您将在中看到每个对象文件的相应信息 档案文件 /home/yuki/sac/lib/libsacio.a ,您将看到体系结构 这些对象文件的文件格式与您的系统不匹配。

    你需要找到并使用 libsacio.a 那是为同一个建筑而建的 作为您的系统-如果您的系统是64位的,则最有可能是64位库;32位 如果您的系统是32位的,则为库。