【问题标题】:libgtest.so file not recognized , format not recognizedlibgtest.so 文件无法识别,格式无法识别
【发布时间】:2020-03-27 13:33:31
【问题描述】:

我正在尝试将 googletest 集成到我的项目中。 我已经构建了 googletest 并生成了 gtest.so 和 gtest_main.so。 将这些文件移动到我的 lib 文件夹并包含到我的包含文件夹中。 编译工作正常,但链接时无法识别 gtest_main.so 格式的格式。 请让我知道可能是什么问题。在进行谷歌测试构建时我是否错过了任何选项?

我构建 googletest 的步骤: 1) 从https://github.com/google/googletest 克隆代码 2) cd 谷歌测试 3)cmake .. 4) 制作

CMakeLists.txt -> 在标志下方启用 设置(CMAKE_CXX_STANDARD 11) set(gtest_force_shared_crt ON CACHE BOOL "" FORCE)

CMakeCache.txt 启用 BUILD_SHARED_LIBS

生成 libgtest.so 时,将 *.so 文件复制到 lib 文件夹 我的项目。

构建我的项目,这是一个 tizen 项目。 收到以下错误 libgtest.so : 文件无法识别,文件格式无法识别 collect2:错误:ld 返回 1 个退出状态 clang++:错误:链接器(通过 gcc)命令失败,退出代码为 1(使用 -v 查看调用)

【问题讨论】:

  • 错过了一个选项,使用了错误的选项。真的谁能说,因为你没有提供任何关于你实际做了什么的细节。
  • 添加了一些细节。如果需要更多信息,请告诉我,
  • 当您构建 gtest 时,它会针对您机器的操作系统和处理器进行编译。您的 Tizen 项目可能会针对其他操作系统或处理器进行交叉编译。这两个项目都需要为相同的操作系统和处理器构建。

标签: c++ c compiler-errors linker googletest


【解决方案1】:

问题似乎在于测试套件是在桌面上构建的,而目标处理器是桌面处理器。另一方面,Tizen 项目针对 ARM 处理器进行了交叉编译。 Tizen SDK 使用单独的堆栈来构建 Tizen 项目并且无法使用您的库。为非 ARM 构建的二进制文件不能与 ARM 二进制文件一起使用。就像@rveerd 写的一样。

无需编译 googletest 即可在 Tizen 项目中使用它。

Tizen SDK 支持 googletest,创建适用于 Tizen 设备的测试项目的最简单方法是使用 SDK 中包含的模板。 https://developer.tizen.org/development/tizen-studio/native-tools/running-and-testing-your-app/unit-test 的指令说:

  1. 在 Tizen Studio 菜单中,选择 File > New > Other > Tizen > Tizen Native Unit Test Project
  2. 在“新建 Tizen 单元测试项目”窗口中:
    • 在 Select the Tizen Project for test 面板中,选择您要测试的项目。
    • 指定测试项目的名称。
    • 指定保存项目的目标文件夹。
    • 点击Finish

如果您希望保留已创建的项目并将 lib 复制到项目中,那么您应该使用与目标架构匹配的 .so 文件。要创建一个,您可以使用 Tizen SDK 工具构建 googletest,或者尝试已经为 Tizen 构建的一个。有包含 googletest 库的 Tizen RPM,例如http://download.tizen.org/releases/milestone/tizen/unified/tizen-unified_20200521.1/repos/standard/packages/armv7l/gstreamer-utils-1.16.2-24.1.armv7l.rpm.

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-02-15
    • 1970-01-01
    • 2021-01-13
    • 2013-06-12
    • 1970-01-01
    • 2018-10-21
    • 2011-05-25
    • 1970-01-01
    相关资源
    最近更新 更多