在vs c ++ 2017中链接libjpeg-turbo

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

我的问题很简单..我无法在我的项目中链接libjpeg-turbo。

我想尝试this exemple,但我无法编译:

errors

我不确定我做错了什么:

Additional lib dir Additional dep

Additional includes

c++ visual-studio-2017 libjpeg libjpeg-turbo
2个回答
1
投票

您可以从github下载vcpkg并在Powershell提示符下运行vcpkg.exe(在管理模式下打开)。 vcpkg可以安装许多开源项目(支持静态和动态库)作为准备在VS 2017和VS 2015(SP3)IDE中使用的软件包。您可以使用选择x86或x64平台,在某些情况下甚至允许选择工具集(例如。\ vcpkg install boost:x64-windows-v141)。如果使用“集成安装”作为vcpkg命令行,则所有库将自动链接到项目,项目.dll文件将自动复制到应用程序文件夹。

因此,在您的情况下,在安装vcpkg.exe之后,键入。\ vcpkg install libjpeg-turbo:x64-windows-static并在安装后键入。\ vcpkg集成安装。 jpeg库将自动链接到您的项目(重新启动您的VS 2017并享受)。


0
投票

请注意,对于turbojpeg-static.lib,您无法使用> VS2010进行编译,除非您自己重新编译libjpegturbo ...

如果可以,我建议使用MinGW进行建设;可以毫无问题地使用turbojpeg静态库。

https://github.com/libjpeg-turbo/libjpeg-turbo/issues/45#issuecomment-181690889

RE:第一个问题,您可以通过链接legacy_stdio_definitions.lib来消除未解决的_snprintf_s符号错误。但是,第二个错误(“未解析的外部符号__iob_func”)不容易解决。这是由于微软最近推出的新的“通用C运行时”(ucrt)库。不幸的是,新的库引入了一些与以前的Microsoft CRT相当的主要不兼容性。

参考http://www.libjpeg-turbo.org/Documentation/OfficialBinaries,从来没有可能在libjpeg-turbo中完全隔离CRT,因为两个libjpeg API函数(jpeg_stdio_dest()和jpeg_stdio_src())需要将FILE句柄从调用程序传递到库。如果libjpeg API库被用作DLL(jpeg62.dll),那么调用程序必须与jpeg62.dll共享相同的CRT DLL,否则将FILE句柄从一个传递给另一个将无效(FILE)指针将指向应用程序的内存空间或DLL中的不透明结构,因此指针对另一个指针将毫无意义。)

传统上,有可能链接到静态libjpeg-turbo库,即使使用不同版本的Visual C ++而不是用于编译库的那些,但显然从未得到过支持(https://connect.microsoft.com/VisualStudio/feedback/details/1144980/error-lnk2001-unresolved-external-symbol-imp-iob-func)并且只是因为CRT的不同版本的Visual C ++非常相似。显然所有这些都随着ucrt的引入而消失。谷歌搜索错误消息表明,我们远远不是唯一受此影响的OSS项目。

目前,这些是我所知道的唯一解决方法:

  • 如果您使用的是TurboJPEG API,则可以链接turbojpeg.dll而不是turbojpeg-static.lib。
  • 如果您正在使用libjpeg API,则可以链接jpeg62.dll而不是jpeg-static.lib,前提是您的应用程序未调用jpeg_stdio_src()或jpeg_stdio_dest()。
  • 如果需要使用jpeg-static.lib或turbojpeg-static.lib,则需要使用旧版本的Visual C ++构建应用程序或使用Visual C ++ 2015构建libjpeg-turbo。
© www.soinside.com 2019 - 2024. All rights reserved.