谷歌协议缓冲区。"进行安装"在 protobuf 构建到交叉臂时不会生成 so 文件



当我为 arm 构建一个 protobuff 然后安装它时,我在 lib/目录中看不到*.so文件,只有*.a*.la。如果我为 x86 构建它,那么一切都很好。

命令顺序如下:

sudo ./configure --host=amd64 --build=arm-linux-gnueabihf --target=arm-linux-gnueabihf --enable-shared --prefix=/home/rivand/install/tmp CC=/usr/bin/arm-linux-gnueabihf-gcc CXX=/usr/bin/arm-linux-gnueabihf-g++ 
sudo make -j4
sudo make install

Protobuf: protobuf-cpp-3.14.0

操作系统: 乌班图 20.04

makeGCCapt install.

你混淆了--host--build--target--host选项指定将在其上运行要生成的项目的计算机类型。--build选项指定要在其上执行生成的计算机类型,通常不需要指定它,因为生成系统可以猜测。事实上,这就是辅助脚本config.guess的全部目的,它应该包含在protobuf发行版中。 仅当您正在构建的东西本身是交叉工具时,--target选项才适用;它为构建的工具本身使用的二进制文件指定计算机类型。

正确设置这些后,您可能不需要显式指定 C 和 C++ 编译器 -configure应该从主机三元组中找出它们。 (宿主三元组出现在交叉工具的名称中并非巧合。

此外,在安装时使用DESTDIR在语义上比在configure时使用--prefix更正确。 它也可能产生真正的差异,因为指定的前缀有时会编译到构建的二进制文件中。

此外,作为旁注,仅在安装步骤中使用sudo,而不是配置和构建步骤。 这样更安全,并且不会在构建目录中留下根拥有的碎片。 但是,如果您正在安装到具有写入权限的目录中,则不需要它,就像您在示例命令中所做的那样。

因此:

./configure --host=arm-linux-gnueabihf --enable-shared
make -j4
make install DESTDIR=/home/rivand/install/tmp

在安装步骤中,您可能会收到来自 libtool 的一些警告,建议您在最终将结果放在其真实安装位置时运行其他 libtool 命令。 通常忽略Linux上的那些是安全的。

我不完全相信这会让你共享库,因为这部分是你正在构建的项目的功能,部分也是跨工具链功能的功能。 但它会让你正确构建工具,并且它很有可能生成想要的共享库。

相关内容

  • 没有找到相关文章

最新更新