Closed. This question needs to be more focused。它当前不接受答案。
想改善这个问题吗?更新问题,使其仅通过editing this post专注于一个问题。
3年前关闭。
TL / DR:问题从我已经制定的步骤开始,我认为有必要提及(请告诉我是否不重要,我将其删除)。问题本身在页面底部。我已经发布了3个问题,它们的提问步骤与提出问题之前的步骤相同,但是问题有所不同。谢谢
我已经使用cmake成功编译了libharu库,因此可以在我自己的c ++项目中使用它来生成PDF文件。它是在Visual Studio 2013中作为Debug / Win32编译的。 cmake-gui的设置方式如下:
我正在使用libharu的当前项目(从头开始创建)具有以下结构(再次是Visual Studio 2013):
Visual Studio项目设置如下:
在主文件中,我这样包含libharu:
最后一个问题:
在
我尝试将
想改善这个问题吗?更新问题,使其仅通过editing this post专注于一个问题。
3年前关闭。
TL / DR:问题从我已经制定的步骤开始,我认为有必要提及(请告诉我是否不重要,我将其删除)。问题本身在页面底部。我已经发布了3个问题,它们的提问步骤与提出问题之前的步骤相同,但是问题有所不同。谢谢
我已经使用cmake成功编译了libharu库,因此可以在我自己的c ++项目中使用它来生成PDF文件。它是在Visual Studio 2013中作为Debug / Win32编译的。 cmake-gui的设置方式如下:
Sources:
c:\Users\wakatana\Downloads\__c++_pdf__generation\libharu-RELEASE_2_3_0
Build:
C:\Users\wakatana\Downloads\__c++_pdf__generation\libharu-build32
我正在使用libharu的当前项目(从头开始创建)具有以下结构(再次是Visual Studio 2013):
./Debug
./libharu_example
./libharu_example/Debug
./libharu_example/Debug/libharu_example.tlog
./libharu_example/libharu
./libharu_example/libharu/include
./libharu_example/libharu/lib
./libharu_example/libharu/src
./libharu_example/libharu/src/CMakeFiles
libharu/include
包含C:\Users\wakatana\Downloads\__c++_pdf__generation\libharu-RELEASE_2_3_0\include
中的文件libharu/src
包含C:\Users\wakatana\Downloads\__c++_pdf__generation\libharu-RELEASE_2_3_0\src
中的文件libharu/lib
包含C:\Users\wakatana\Downloads\__c++_pdf__generation\libharu-build32\src\Debug
中的文件Visual Studio项目设置如下:
# C/C++ -> General -> Additional Include Directories:
$(ProjectDir)libharu\include
# C/C++ -> Preprocessor -> Preprocessor Definitions:
_CRT_SECURE_NO_WARNINGS
# Linker -> General -> Additional Library Directories
$(ProjectDir)libharu\lib
# Linker -> Input -> Additional Dependencies
libhpdfd.lib
在主文件中,我这样包含libharu:
#include "libharu/include/hpdf.h"
最后一个问题:
在
C:\Users\wakatana\Downloads\__c++_pdf__generation\libharu-build32\src\Debug
目录中,还有那些文件:libhpdfd.dll
libhpdfd.exp
libhpdfd.ilk
libhpdfd.lib
libhpdfd.pdb
libhpdfsd.lib
我尝试将
Linker -> Input -> Additional Dependencies
也设置为libhpdfsd.lib
和libhpdfd.dll
,但是唯一起作用的是libhpdfd.lib
。上面提到的其他文件的目的是什么?如何知道应该使用哪个* .lib * .dll?另外,为什么我需要为Visual Studio指定它?它不够聪明,可以自动加载吗?它已经指定了$(ProjectDir)libharu\lib
所有这些库的存储位置,为什么不仅仅自动选择最佳库呢? 最佳答案
libhpdfsd.lib
-这是一个静态库。静态库在构建时由链接器链接。libhpdfd.dll
-这是一个动态链接的库。与静态库相反,它在构建时未链接。而是在运行时使用LoadLibrary将其显式加载到进程内存中,并使用GetProcAddress获得其导出函数和变量的地址。这需要编写一些样板代码。为了避免这样做,通常会有一个对应的静态库,称为导入库,可以自动为您完成此操作。这就是libhpdfd.lib
。libhpdfd.pdb
-这是一个程序数据库文件。由调试器使用。libhpdfd.exp
-这是一个导出文件。当您具有循环依赖性时,它很有用。libhpdfd.ilk
-此文件用于增量链接。增量链接可加快链接阶段,这在调试过程中对代码进行少量更改并重建所有项目时非常有用。
您需要明确指定要使用的库,因为您可能具有不同的库或同一库的不同版本,这些库会导出具有相同名称的符号。在这种情况下,链接器无法知道应从哪个库导入您的符号,并且会出现链接器错误。我相信将libhpdfsd.lib
添加到其他依赖项时遇到的错误是由于这个原因。
是否使用静态库或dll由您决定。您的默认选择是使用静态库,必要时使用dll。
关于c++ - 如果知道lib的路径,为什么要在Visual Studio中指定特定的库? ,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/39420924/
10-12 17:29