我阅读了很多帖子,但我还不太了解如何将目标链接到库的静态版本。
我的项目依赖于poco库,而在linux中它们存储在我的windows机器中的/ usr / local / lib(静态和共享版本)中,位于d:\ libs \ poco \ lib和d:\ libs \ poco \ bin(我有一个名为POCO_DIR = D:\ libs \ poco的环境变量)
那么,我怎样才能在cmake文件中编写find_library()指令?
提前致谢。
答案 0 :(得分:3)
您永远不会在Windows上链接Poco DLL,即使您使用共享Poco库也是如此。链接始终与%POCO_BASE%/ lib中的条目相关联。对于共享构建,.lib只是一个存根("导入库"),它负责在运行时加载DLL。有关其工作原理的详细信息,请参阅Linking Implicitly。
Poco静态库可以通过文件名与DLL的导入库区分开来 - 静态库有" mt" (" mtd"用于调试二进制文件," md"" mdd"当使用运行时库DLL时)附加到名称。因此,PocoFoundation.dll的导入库将命名为PocoFoundation.lib,而使用静态运行时的静态库名为PocoFoundationmt.lib。使用动态运行时的静态库是PocoFoundationmd.lib。有关详细信息,请参阅Use Run-Time Library。
至于CMake,我不是专家,但对于例如static Foundation和Net库应该是这样的:
FIND_LIBRARY(Poco_LIBRARIES NAMES PocoFoundationmt PocoNetmt PATH_SUFFIXES ${POCO_DIR}/lib)
编辑:如果在项目中定义POCO_STATIC,静态链接将通过库标题自动进行,例如, Foundation.h。