1

请滚动到底部以列出更新的简短问题

我正在构建PoDoFo。在最后一步,我使用 cmake 为 PoDoFo 创建 Visual Studio 2010 .sln 文件。但是,当我构建此解决方案文件时,它找不到依赖库的头文件。例如,它没有找到 boost 库头文件。

c:\pdf\podofo-0.9.1\src\base\PdfDefines.h(66): fatal error C1083: Cannot open include file: 'boost/config.hpp': No such file or directory

如果我禁用 boost,我会收到类似的 freetype 库头错误

2>..\..\src\doc\PdfFontCache.cpp(55): fatal error C1083: Cannot open include file: 'ft2build.h': No such file or directory

这是我的 build.cmd 文件

del cmakecache.txt

set BOOST_ROOT=C:\pdf\boost_1_51_0_code
set BOOST_INCLUDE_DIR=C:\pdf\boost\boost_1_51_0\staging\include
set BOOSTLIBDIR=C:\workspace\lib\boost\boost_1_51_0\staging\lib

set FT_INCLUDE=C:\PDF\freetype-2.4.0\include\freetype


set FTDIR=C:\PDF\freetype-2.4.0\objs\win32\vc2008
set JPEGDIR=C:\PDF\jpeg-8d\Release\lib
set TIFDIR=C:\PDF\tiff-4.0.3\lib
set ZLIBDIR=C:\pdf\zlib-1.2.8


set BUILD_FLAGS="/MT"

cmake  -G "Visual Studio 10" "C:\pdf\podofo-0.9.1" ^
    -DCMAKE_CXX_FLAGS_RELEASE:STRING=%BUILD_FLAGS%  ^
    -DFREETYPE_INCLUDE_DIR=%FT_INCLUDE% ^
    -DLIBJPEG_LIBRARY_RELEASE=jpeg ^
    -DCMAKE_INCLUDE_PATH="%INCLUDE%;%BOOST_INCLUDE_DIR%;%FT_INCLUDE%;%FT_INCLUDE%\freetype;%JPEGDIR%\jpeg;%TIFDIR%\tiff;%ZLIBDIR%\zlib" ^
    -DCMAKE_LIBRARY_PATH="%LIB%;%BOOSTLIBDIR%;%FTDIR%;%JPEGDIR%\lib;%TIFDIR%;%ZLIBDIR%\lib" ^
    -DPODOFO_BUILD_SHARED:BOOL=FALSE ^
    -DPODOFO_BUILD_STATIC:BOOL=TRUE ^
    -DWANT_BOOST:BOOL=0 ^
    -DLIBJPEG_LIBRARY_NAMES_RELEASE=jpeg ^
    -DFREETYPE_LIBRARY_NAMES_RELEASE=freetype240MT ^
    -DZLIB_LIBRARY_NAMES_RELEASE=zlibstat

我是 CMake 的新手,我不明白库依赖项如何传递到 Visual Studio 项目?.

这是生成的解决方案文件中路径的屏幕截图。我不明白这些路径是如何从小脚本文件中进行的?它们不完全对应,DCMAKE_LIBRARY_PATH所以它们来自哪里?

Visual Studio 项目中的项目路径 - 它们来自脚本文件的哪一部分?

如何修复解决方案文件中的这些包含错误?我尝试将这些路径添加到 Project Properites >> VC++ Directories >> 'Include Directories' 但它仍然不想构建。恐怕即使我消除了这些包含错误,我也会收到链接器错误,因为库路径也可能不正确。如何修复这些错误并构建项目?谢谢。

更新的问题

我通过将路径更改为:

FT_INCLUDE=C:\PDF\freetype-2.4.0\include\

现在正如我所料,我得到了很多链接器错误。但是我注意到它确实创建了 PoDoFo.lib 文件,所以现在我尝试在示例演示中使用它。我也成功编译了它,但出现以下链接器错误:

1>podofo.lib(PdfFont.obj) : error LNK2001: unresolved external symbol @__security_check_cookie@4
1>podofo.lib(PdfDifferenceEncoding.obj) : error LNK2001: unresolved external symbol @__security_check_cookie@4
1>podofo.lib(PdfFontSimple.obj) : error LNK2001: unresolved external symbol @__security_check_cookie@4
1>podofo.lib(PdfIdentityEncoding.obj) : error LNK2001: unresolved external symbol @__security_check_cookie@4
1>podofo.lib(PdfFontTrueType.obj) : error LNK2001: unresolved external symbol @__security_check_cookie@4
1>podofo.lib(PdfFontMetricsObject.obj) : error LNK2001: unresolved external symbol @__security_check_cookie@4
1>podofo.lib(PdfEncodingObjectFactory.obj) : error LNK2001: unresolved external symbol @__security_check_cookie@4

我确实确保将依赖库与路径一起添加到项目设置中,但为什么我仍然会收到这些错误?

4

1 回答 1

0

我建议您使用 cmake-gui 来构建 PoDoFo,而不是直接使用 nmake。不要编写自己的 build.cmd,因为这在大多数情况下不起作用。注意:下面介绍的方法使用你的方法,不要照着走。使用 cmake-gui(如果您不知道 cmake 或 nmake 的工作原理)。

好吧,我建议您访问此站点并查找参考资料:使用 MSVS 2012 构建静态 podofo 好吧,我想这应该适用于 Visual Studio 2010。请记住:

构建必备库- 该站点还提供有关如何继续构建这些库的链接。但是,我假设您已经构建了它们。但是,我建议根据本教程再次构建它们。

指导意见:照他说的做。不要错过任何有关预处理器定义、运行时库和所有参数的选项。如果您错过任何事情或做错事,这将迫使您从开始的地方重新开始。

错误:我自己在遵循相同的程序时遇到了很多错误,这个网站没有提供任何解释。常见错误包括:

未解决的外部(使用 msvcrt.lib 或 libcmt.lib)。在这种情况下,只需转到链接器>输入>忽略特定库并在那里命名该库即可忽略它。有时会出现随机错误。我建议查找 Stack Overflow 本身或 MSDN 或 Google,因为在开始出现 >2500 个错误之后,我终于能够构建一个静态库。

不得已:如果一切都失败了,请联系我(如果您仍然感兴趣!)。

于 2014-01-30T18:39:11.480 回答