编译libjpeg

30

有没有人成功地在某个编译器中包含了libjpeg?我尝试了所有的方法:Dev C++、VS10、CodeBlocks,手动复制头文件和库文件,用链接器添加等等,但都没有成功。现在我非常困惑,因为没有关于如何在任何编译器中编译它的官方指南。如果有人能够提供关于如何在任何编译器中编译该库的教程,我将非常高兴。 提前感谢您。


在类Unix系统上(例如Cygwin,因为您似乎在Windows上),尝试标准的./configure && make && make install。对我来说,在Ubuntu上从这里的.tar.gz归档文件中使用这种方法似乎很有效:http://sourceforge.net/projects/libjpeg/files/libjpeg/6b/ - John Carter
是的,我想要编译。我需要使用一些读写JPEG文件的函数。我正在编译这段代码http://pastebin.com/3wkp9MWQ,并添加了所有头文件和.lib .a文件,然后出现以下错误:C:\Program Files (x86)\Dev-Cpp\lib\jpeg-bcc.lib文件无法识别:文件格式无法识别(这通常意味着GCC不喜欢文件扩展名) collect2: ld返回1个退出状态 C:\Users\NIVER\Desktop\Makefile.win [Error] [Project1.exe] Error 1(如果这是唯一的错误:请检查您的库包含) - NiVeR
但正如你所说,我在Windows上,这里不会起作用。 - NiVeR
你是从源代码编译库,还是尝试链接到已下载的编译库? - John Carter
相关链接:https://stackoverflow.com/questions/46055720/cannot-load-any-image-with-cimg/46058914#46058914 - lucidbrot
显示剩余2条评论
7个回答

46

在Visual Studio 2012中编译libjpeg9,以下是步骤(在解压缩存档文件后):

  1. 下载文件WIN32.MAK(例如,从http://www.bvbcode.com/code/f2kivdrh-395674-down),并将其副本放置于根源代码目录中(可能为C:\jpeg-9,但取决于您解压缩的位置)。我将从现在开始称此目录为%jpegsrc%。拥有此文件非常重要;否则第3步会产生错误。

  2. 在Visual Studio命令提示符中,打开%jpegsrc%

    cd %jpegsrc%

  3. 在同一个命令提示符中,执行以下操作:

    NMAKE /f makefile.vc setup-v10

    这将在%jpegsrc%中创建两个Visual Studio 2010解决方案:jpeg.slnapps.sln

  4. 在Visual Studio 2012中打开每个解决方案。每个都会提示您将所有项目更新为2012格式。单击“更新”。有一次我这样做了,提示没有出现。如果发生这种情况,请右键单击解决方案资源管理器中的jpeg解决方案,然后选择“更新VC++项目...”,这将产生相同的提示。

  5. 像平常一样保存和构建每个解决方案。(您必须先构建jpeg.sln解决方案,然后构建apps.sln,因为后者依赖于前者。)

注意:此过程应在Visual Studio 2010中正确工作,无需更新,但我尚未测试过。

更新:此方法仍适用于Visual Studio 2015的libjpeg-9a


1
这在VStudio2013上运行良好。我在编译应用程序的x64版本时遇到了问题,它支持x64吗? - notNullGothik
2
什么是win32.mak,为什么它没有包含在其他库文件中? - jiggunjer
1
@jiggunjer win32.mak是(引用文件本身)“Microsoft Plaform SDK for Win32编程示例的Win32应用程序主NMAKE定义文件。”基本上,它允许您使用NMAKE作为自动化工具在C中编译Windows程序。该文件曾经包含在Visual Studio中,但在更近期的版本中已不再包含。我刚刚使用Visual Studio 2015编译了libjpeg,并且只需打开“jpeg.sln”解决方案,右键单击“jpeg”项目,选择“属性”,然后将“配置类型”更改为“动态库(dll)”,就能生成DLL。 - AthanasiusOfAlex
1
@notNullGothik 请查看MSDN网站上的https://msdn.microsoft.com/en-us/library/9yb4317s.aspx。简而言之,您可以创建一个新的目标平台,并复制现有目标的设置。 - AthanasiusOfAlex
3
这适用于VS2013 x64。我从“C:\Program Files (x86)\Microsoft SDKs\Windows\v7.1A\Include”复制了Win32.Mak文件。 - Dženan
显示剩余4条评论

26

以下是我如何在Windows上使用MinGW构建libjpeg:

1. 获取带有MSYS的MinGW

我从http://sourceforge.net/projects/mingw/获取了一份拷贝。引用自www.mingw.org:

MSYS是GNU实用程序的集合,例如bash、make、gawk和grep,它们使得依赖于传统UNIX工具的应用程序和程序能够存在。

我们需要它来运行随libjpeg源代码提供的configure脚本。


2. 获取libjpeg源码

http://www.ijg.org/下载Unix格式的软件包(Windows格式的软件包不适用于此过程)。我选择了jpeg_8d版本。


3. 准备构建目录

我在D盘创建了一个名为tmp的临时目录,但您可以根据需要选择任何名称。重要的是MSYS中路径的名称。由于它为Windows添加了一些Unix风格,因此不能使用原始形式的路径。 简而言之:

C:\path\to\file变成了MSYS中的/c/path/to/file,因此 D:\tmp变成了/d/tmp

将libjpeg源文件解压到D:\tmp,这样您就会在其中得到一个名为jpeg-8d的目录。

D:\tmp中创建一个名为jpeg-build的目录,它将保存构建好的库。

现在一切准备就绪,可以开始构建了。


4. ./configure、make和make install

这是在Unix环境中构建的口头禅。需要添加一个选项来将安装过程重定向到D:\tmp\jpeg-build

在MSYS shell(也称为Windows开始菜单中的MinGW shell)中运行以下命令:

cd /d/tmp/jpeg-8d
./configure --prefix=/d/tmp/jpeg-build
make
make install
作为额外的步骤,您可以运行make test以确保安全性。
这些命令将构建libjpeg的静态和共享版本。
如果一切顺利,您可以删除D:\tmp\jpeg-8d目录,但保留jpeg-build目录。它包含:
- 一个include目录,包含libjpeg头文件。 您可以将它们移动到编译器的头文件目录中。 - 一个lib目录,包含传递给链接器的`.a`文件。 您可以将它们移动到编译器的库目录中。 - 一个bin目录,保存了libjpeg共享库libjpeg-8.dll和jpeg工具。 - 一个share目录,包含jpeg工具的man页面。
现在,您可以通过指定正确的include和library路径来构建程序并将其链接到libjpeg。
您可以在源包内的install.txt中找到有关libjpeg构建和安装过程的详细信息。
希望这会有所帮助。

我安装了MinGW,但找不到任何可执行文件。 - NiVeR
我按照您说的做了一切,通过复制所有头文件和其他文件来配置Dev C++,现在我应该能够运行libjpeg下载存档中包含的example.c示例了吗? - NiVeR
好的,我会查看的。要获取更多帮助,请尝试发布另一个问题,其中包括有关您收到的错误的详细信息。 - overcoder
1
同时在 configure 中使用 --host=x86_64-w64-mingw32 以获取非 Cygwin 版本的 Windows。 - jiggunjer
最终通过使用MSYS2下载MinGW工具包(gcc,make等)的64位版本解决了问题。确保检查安装的所有步骤,最后您应该拥有C:\msys64\mingw64\bin并带有make.exe... - Paltoquet
显示剩余6条评论

17

使用VS10构建jpeg.lib非常简单。

首先,以zip格式下载libjpeg源代码。在我撰写本文时,您可以在此处找到它:这里

然后将zip文件的内容解压到您的磁盘上。

接下来,打开VS2010命令提示符窗口(或在任何命令提示符窗口中调用vcvarsall.bat),cd到jpeg源代码目录(下载中引用的是jpeg-8d),然后键入以下内容:

nmake -f makefile.win setup-v10

这将会生成两个VS2010的解决方案和一堆项目文件。这两个解决方案分别是:

  • jpeg.sln,它用于构建jpeg.lib
  • apps.sln,它用于构建示例应用程序。

祝好运!


1
你能给我一个链接,让我可以下载jpeg.sln和apps.sln吗?因为我遇到了一些问题,它说“nmake”不是已知的内部命令。 - NiVeR
sln和vcxproj文件随libjpeg附带,您已经拥有它们。您的问题是您没有使用具有Visual Studio环境变量设置的命令提示窗口。您必须运行vcvarsall.bat来设置它,或从“开始”菜单中启动VS命令提示符。 - Miguel Grinberg
是的,我正在使用那个提示,问题在于它说找不到文件夹VS Common Tools的位置。 - NiVeR
您可能需要重新安装Visual Studio并重试。nmake.exe随Express和付费版的VS一起提供。在我的VS2012安装中,它位于“C:\Program Files (x86)\Microsoft Visual Studio 11.0\VC\bin”目录下。 - Miguel Grinberg
2
无法制作'setup-v10',出现致命错误U1073。 - Vinz
显示剩余2条评论

4
如果您没有安装Visual Studio 2010,以下是在Visual Studio 2017上的操作步骤:
基本/常见步骤:
1.从http://www.ijg.org/下载最新版本的libjpeg(zip版本)并将其提取到文件夹中 2.打开“VS2017开发人员命令提示符” 3.更改目录(cd)到您提取库源代码的位置
VS 2017方法:
4.通过运行“set INCLUDE =%INCLUDE%; c:\ Program Files(x86)\ Microsoft SDKs \ Windows \ v7.1A \ Include”包含Windows SDK v7.1A目录(后续由nmake使用Win32.Mak所需) 5.运行“nmake / f makefile.win setup-v15”(请注意此处v15用于VS2017)
从这里开始按照@AthanasiusOfAlex的说明将Visual Studio 2010解决方案升级到您正在运行的Visual Studio版本。如果您想要调试配置,请按照@SteveEng的说明操作。
可能会遇到的错误:
- 如果nmake失败并告诉您不知道如何制作jconfig.h,请手动将文件jconfig.vc重命名为jconfig.h。 - 如果nmake失败并告诉您找不到Win32.Mak,请手动从第4步中提到的SDK目录复制它到libjpeg源目录。如果您没有安装该SDK版本,请从可信资源下载该文件。 - 如果nmake失败并告诉您不知道如何制作setup-v15,请通过从setup-v10、setup-v11等开始进行试错,这些是VS版本之一,只要您安装了VS 2008之后的任何VS版本之一,其中一个应该可以正常工作。
希望这能帮助那些经历类似痛苦的人们。

次要类型,这是Visual C的jconfig.vc文件。 - Crypth
2
我使用了Anathasius答案中的文件链接(http://www.bvbcode.com/code/f2kivdrh-395674-down),因此不得不使用`makefile.vc`而不是`makefile.win`。 感谢您的回答! - lucidbrot

3
如果你想在MSVC中启用调试模式,请按照AthanasiusOfAlex的方法进行操作,首先构建发布版,然后:
  1. 右键单击项目并选择属性(在最底部)
  2. 点击“配置管理器”,在活动解决方案配置下拉菜单中选择“新建”
  3. 将名称设置为“debug”,在下拉菜单中选择从“release”复制配置设置,然后点击“确定”
  4. 关闭对话框,在常规设置下,在目标名称末尾添加一个“d”,使其看起来像这样:$(ProjectName)d
  5. 在“整个程序优化”下拉菜单中选择:“无整个程序优化”
  6. 然后,在左侧的配置属性下,单击C/C++,在“调试信息格式”下拉菜单中选择C7兼容性(/Z7)
  7. 在优化下选择禁用,并选择“启用纤程安全优化”和“整个程序优化”的NO
  8. 在预处理器-预处理器定义下,单击编辑并使用以下内容: WIN32 _DEBUG DEBUG _LIB _CRT_SECURE_NO_WARNINGS
  9. 在代码生成下-运行库中选择多线程调试DLL(/MDd)
构建并完成!

0

我使用以下步骤在Visual Studio 2022 cmd中构建了libjpeg-turbo:

set PATH=D:\build\build_utils\nasm-2.16.01;%PATH%

mkdir build_jpeg

cd build_jpeg

cmake -G"NMake Makefiles" -DCMAKE_BUILD_TYPE=Release ..\libjpeg-libjpeg-turbo-2.1.0

nmake

所有的exe、dll和libs都将在build_jpeg文件夹中创建。

-1

这是针对版本号为16.0的VS2019的

在创建.sln文件时,请正确考虑Visual Studio版本名称,如下所示。

产品名称 代号 版本号

Visual Studio 2019 Dev16 16.0

Visual Studio 2017 Dev15 15.0

Visual Studio 2015 Dev14 14.0

Visual Studio 2013 Dev12 12.0


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