我如何在我的gcc编译器中链接第三方库bzip2?

问题描述 投票:0回答:2

我是C语言新手的Python开发人员,需要在Windows和Linux上运行Windows上的C代码。

为此,我下载了MSYS2,并使用pacman安装了gcc和bz2

我的问题是:如何在我的C代码中使用bzip2。

当我尝试编译此C代码时:

#include <bzlib.h>

使用命令gcc test.c -lbzip2 -o test.out,出现以下错误:

test.c:1:10: fatal error: bzlib.h: No such file or directory

我包括正确的头文件吗?我是否正确链接了?

当不使用第三方库时,一个简单的“ hello world”程序可以编译并很好地执行。

c gcc static-linking msys2 bzip2
2个回答
0
投票

安装列出的所有二进制软件包here并将标头文件名更改为bzlib.h解决了该问题。


0
投票

简短版本:假定您正在使用MSYS目标pacman -S libbz2-devel


Long version:在MSYS2中,您可以使用以下方法找到哪个软件包包含文件:

pacman -F bzlib.h

答案是:

mingw32/mingw-w64-i686-bzip2 1.0.8-1 [installed]
    mingw32/include/bzlib.h
mingw64/mingw-w64-x86_64-bzip2 1.0.8-1 [installed]
    mingw64/include/bzlib.h
msys/libbz2-devel 1.0.8-1 (development)
    usr/include/bzlib.h

要解释此输出,首先要了解MSYS2安装支持三个不同的开发目标:

  • mingw32(使用mingw-w64构建本机Win32应用程序)
  • mingw64(使用mingw-w64构建本机Win64应用程序)
  • msys(使用定制的GCC端口和运行时库,构建依赖于MSYS DLL和运行时环境的Win32或Win64应用程序,并支持许多POSIX功能。

安装MSYS2时,您将在开始菜单中获得三个启动脚本,每个环境都对应一个。

以上pacman -F的输出告诉我们,对于目标mingw32mingw64,包bzip2包含使用bzip进行开发所需的文件。但是,在msys目标上,需要包libbz2-devel

这是msys和各种* nix软件包管理器(MSYS2 pacman是ArchLinux pacman的端口)中的常见软件包布局:

  • bzip2是在shell中使用bzip2的二进制文件
  • [libbz2是共享库二进制(DLL)
  • libbz2-devel是将bzip2链接到程序中所需的头文件和静态库。

您可以使用pacman -F --list libbz2-devel等列出每个文件包的文件。>

mingw32 / mingw64目标通常具有单个软件包,该软件包在一个软件包中包含所有这三样东西,例如pacman -F --list mingw64/mingw-w64-x86_64-bzip2

我假设您使用的是msys目标,否则将不会出现此问题。

© www.soinside.com 2019 - 2024. All rights reserved.