如何在Linux Ubuntu上安装Flatc和Flatbuffers

14

如果我们在Linux Ubuntu上安装了FlatBuffers,我们将无法使用shortc flatc命令从任何地方进行编译,我们该如何解决?

例如:我想在package.json中使用一些命令 "flatc -o path/src/app/core/providers/flatbuffers ....."

为了实现这一点,仅仅安装FlatBuffers是不够的,我们还需要进行一些额外的操作-添加符号链接等。


1
你好!请给出一些你尝试安装软件的例子,期望的行为(正常工作)以及结果(无法正常工作)。 - Spyros K
这个问题与FlatBuffers无关,因为在Linux上编译任何二进制文件的答案都是相同的。而且你的答案并不好,将系统目录链接到git文件夹中。修改PATH可能是另一个选择,或者复制..坦率地说,最好不要在所有地方都可用,因为要使用其输出,您仍需要其余的目录。还不如使用指向FlatBuffers目录的脚本。 - Aardappel
5个回答

39

针对Linux Ubuntu的Flatc和Flatbuffers解决方案:

  1. 选择“安装文件夹”
  2. 进入“安装文件夹”所在目录
  3. 克隆git库:https://github.com/google/flatbuffers.git
  4. 进入flatbuffers目录
  5. 执行命令:cmake -G "Unix Makefiles"(如果需要,先安装cmake)
  6. 执行命令:make
  7. 创建软链接:sudo ln -s /full-path-to-flatbuffer/flatbuffers/flatc /usr/local/bin/flatc
  8. 赋予可执行权限:chmod +x /full-path-to-flatbuffer/flatbuffers/flatc
  9. 现在可以在任意位置运行“flatc”命令了

1
对我来说有效,这也是第一个谷歌搜索结果。我还需要将 include 目录复制到 /usr/include 才能使用 #include <flatbuffers/flatbuffers.h> - hauron
1
  1. sudo ln -s $(realpath $(find . -name "flatc")) /usr/local/bin/flatc
  2. sudo ln -s $(realpath $(find . -name "flatc")) /usr/local/bin/flatc
- Ivan Kovtun
也许在make install和链接创建之间,还会将头文件放置在正确的位置等。 - kalyanswaroop
在我的情况下,我必须使用 cmake -G "Unix Makefiles" . 进行编译(可能是由于较旧的 cmake 版本)。 - Yonatan
请注意,Ubuntu 20.04(以及其他版本)已经打包了Flatbuffers。请参考@Gea-Suan Lin的下面的答案。sudo apt install -y flatbuffers-compiler - Evan
当我尝试执行'make'时,遇到了以下错误。make[2]: *** [CMakeFiles/flatbuffers.dir/build.make:161: CMakeFiles/flatbuffers.dir/depend] Error 1 make[1]: *** [CMakeFiles/Makefile2:95: CMakeFiles/flatbuffers.dir/all] Error 2 make: *** [Makefile:146: all] Error 2 - Nappa

11
在Ubuntu 20.04(focal)中,flatbuffers-compiler已经在apt仓库中了(https://packages.ubuntu.com/focal/flatbuffers-compiler),所以你只需要安装即可:
sudo apt update
sudo apt install -y flatbuffers-compiler

对于 Ubuntu 18.04 (bionic),您可以使用 PPA (https://launchpad.net/~hnakamur/+archive/ubuntu/flatbuffers):

sudo apt-add-repository ppa:hnakamur/flatbuffers
sudo apt update
sudo apt install -y flatbuffers-compiler

这两个版本有些陈旧(1.11),但如果你不使用最新功能,那么这应该非常稳定。


谢谢!这绝对比手动构建并手动管理后续更新要好。 - Evan
flatc的版本是1.x,相当老了。 - undefined

10
Olexandr的回答仅适用于flatc二进制文件。
要使用cmake从源代码构建和安装所有flatbuffers,请按照这里的说明操作:
  • 克隆repocd flatbuffers
  • 为Linux Ubuntu生成构建文件
cmake -G "Unix Makefiles" -DCMAKE_BUILD_TYPE=Release
  • 编译
make
  • 安装
sudo make install

Install the project...
-- Install configuration: "Release"
-- Installing: /usr/local/include/flatbuffers
-- Installing: /usr/local/include/flatbuffers/stl_emulation.h
-- Installing: /usr/local/include/flatbuffers/flexbuffers.h
-- Installing: /usr/local/include/flatbuffers/minireflect.h
-- Installing: /usr/local/include/flatbuffers/flatbuffers.h
-- Installing: /usr/local/include/flatbuffers/pch
-- Installing: /usr/local/include/flatbuffers/pch/flatc_pch.h
-- Installing: /usr/local/include/flatbuffers/pch/pch.h
-- Installing: /usr/local/include/flatbuffers/flatc.h
-- Installing: /usr/local/include/flatbuffers/code_generators.h
-- Installing: /usr/local/include/flatbuffers/util.h
-- Installing: /usr/local/include/flatbuffers/grpc.h
-- Installing: /usr/local/include/flatbuffers/base.h
-- Installing: /usr/local/include/flatbuffers/registry.h
-- Installing: /usr/local/include/flatbuffers/hash.h
-- Installing: /usr/local/include/flatbuffers/reflection_generated.h
-- Installing: /usr/local/include/flatbuffers/idl.h
-- Installing: /usr/local/include/flatbuffers/reflection.h
-- Installing: /usr/local/lib/cmake/flatbuffers/FlatbuffersConfig.cmake
-- Installing: /usr/local/lib/cmake/flatbuffers/FlatbuffersConfigVersion.cmake
-- Installing: /usr/local/lib/libflatbuffers.a
-- Installing: /usr/local/lib/cmake/flatbuffers/FlatbuffersTargets.cmake
-- Installing: /usr/local/lib/cmake/flatbuffers/FlatbuffersTargets-release.cmake
-- Installing: /usr/local/bin/flatc
-- Installing: /usr/local/lib/cmake/flatbuffers/FlatcTargets.cmake
-- Installing: /usr/local/lib/cmake/flatbuffers/FlatcTargets-release.cmake

1
这是一个用于让生活变得更加轻松的CMake文件。这些CMake命令将从git仓库下载flatbuffer并在Linux系统中进行全局安装。构建后运行“sudo make install”即可安装。

----------将以下内容保存到CMakeLists.txt文件中并运行cmake-----------

cmake_minimum_required(VERSION 3.11)
cmake_policy(SET CMP0048 NEW)

project(flatbuffers-external
    VERSION 2.0.0
    DESCRIPTION "Flatbuffers Build"
)

option(FLATBUFFERS_BUILD_TESTS "Enable the build of tests and samples." OFF)
option(FLATBUFFERS_BUILD_FLATC "Enable the build of the flatbuffers compiler"
       OFF)
option(FLATBUFFERS_STATIC_FLATC "Build flatbuffers compiler with -static flag"
       OFF)
option(FLATBUFFERS_BUILD_FLATHASH "Enable the build of flathash" OFF)


include(FetchContent)
FetchContent_Declare(
    flatbuffers_cpp
    GIT_REPOSITORY  https://github.com/google/flatbuffers.git
    GIT_TAG         v2.0.0
    PREFIX            "${PROJECT_SOURCE_DIR}/tp"
    SOURCE_DIR        "${PROJECT_SOURCE_DIR}/tp/fb"
    BINARY_DIR        "${PROJECT_SOURCE_DIR}/tp/fb-build"
)

FetchContent_MakeAvailable(flatbuffers_cpp)

1

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接