【问题标题】:building library failed: file format not recognized; treating as linker script构建库失败:文件格式无法识别;视为链接描述文件
【发布时间】:2020-03-04 04:24:09
【问题描述】:

我使用 Ubuntu 18.04.3 LTS (gcc 7.4.0) 我已经成功构建了 shaderc 以及 ktx library 所需的所有组件。当我构建 ktx 库(cmake/Iinux/debug 或发布)时,出现以下错误:

[ 91%] Linking CXX executable gl3loadtests
/usr/bin/ld:/home/user/Downloads/KTX-Software-master/build/cmake/linux/Release/../../../../other_lib/linux/Release-x64/libSDL2-2.0.so: file format not recognized; treating as linker script
/usr/bin/ld:/home/user/Downloads/KTX-Software-master/build/cmake/linux/Release/../../../../other_lib/linux/Release-x64/libSDL2-2.0.so:1: syntax error
collect2: error: ld returned 1 exit status
CMakeFiles/gl3loadtests.dir/build.make:205: recipe for target 'gl3loadtests' failed
make[2]: *** [gl3loadtests] Error 1
CMakeFiles/Makefile2:218: recipe for target 'CMakeFiles/gl3loadtests.dir/all' failed
make[1]: *** [CMakeFiles/gl3loadtests.dir/all] Error 2
make[1]: *** Waiting for unfinished jobs....

符号链接看起来是这样的:

libSDL2-2.0.so -> libSDL2-2.0.so.0
libSDL2-2.0.so.0 -> libSDL2-2.0.so.0.9.0
libSDL2-2.0.so.0.9.0

有人在 linux 上遇到过同样的错误吗?如何解决?

【问题讨论】:

    标签: c++ c linux ubuntu linker


    【解决方案1】:

    如果您查看文件大小,您会发现 .so 文件相当小,大约 130 字节。另一方面,存储库包含一个大小为几兆字节的文件(请参阅 [repository][1])。差异源于我们从服务器下载存储库的方式:通过 git clone

    正如自述文件中所暗示的,需要 git lfs 工具来正确完整地读取存储库。不幸的是,无论出于何种原因,这似乎不会自动运行,但我发现以下命令序列可以提供帮助:

    1. 从 Ubuntu 的标准软件存储库安装 git lfs
    2. 完全删除本地存储库并重新克隆它(这可能没有必要)
    3. 进入包含本地仓库克隆的目录
    4. git lfs fetch(这可能是不必要的)
    5. git lfs pull

    pull 命令最终将那些实际上只是指向存储库的 lfs 链接的小(大约 130 字节)文件替换为它们各自的大二进制文件。

    [1]: https://github.com/KhronosGroup/KTX-Software/blob/master/other_lib/linux/Debug-x64/libSDL2-2.0.so.0.9.0 : 存储库中的.so 文件

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2011-07-31
      • 1970-01-01
      • 2021-02-03
      • 1970-01-01
      • 2018-02-15
      • 1970-01-01
      相关资源
      最近更新 更多