Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/cmake/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 将poco静态库链接到cmake中的目标_C++_Cmake_Poco Libraries - Fatal编程技术网

C++ 将poco静态库链接到cmake中的目标

C++ 将poco静态库链接到cmake中的目标,c++,cmake,poco-libraries,C++,Cmake,Poco Libraries,我读了很多文章,但我还不太明白如何将我的目标链接到库的静态版本 我的项目依赖于poco库,而在linux中,它们存储在/usr/local/lib(静态和共享版本)中,在我的windows计算机中,它们位于d:\libs\poco\lib和d:\libs\poco\bin(其中我有一个名为poco_DIR=d:\libs\poco的环境变量) 那么,我如何才能在cmake文件中编写find_library()指令呢 提前感谢。您永远不会在windows上链接Poco DLL,即使在使用共享Poc

我读了很多文章,但我还不太明白如何将我的目标链接到库的静态版本

我的项目依赖于poco库,而在linux中,它们存储在/usr/local/lib(静态和共享版本)中,在我的windows计算机中,它们位于d:\libs\poco\lib和d:\libs\poco\bin(其中我有一个名为poco_DIR=d:\libs\poco的环境变量)

那么,我如何才能在cmake文件中编写find_library()指令呢


提前感谢。

您永远不会在windows上链接Poco DLL,即使在使用共享Poco库时也是如此。链接始终与%POCO_BASE%/lib中的条目关联。对于共享构建,.lib只是一个存根(“导入库”),负责在运行时加载DLL。有关如何工作的详细信息,请参见

Poco静态库可以通过文件名与DLL的导入库进行区分-静态库的名称后面附加了“mt”(“mtd”表示调试二进制文件,“md”和“mdd”(当使用运行时库DLL时)。因此,PocoFoundation.dll的导入库将命名为PocoFoundation.lib,而使用静态运行时的静态库将命名为PocoFoundationmt.lib。使用动态运行时的静态库是PocoFoundationmd.lib。有关详细信息,请参阅

对于CMake,我不是专家,但例如静态基础和网络库应该是这样的:

FIND_LIBRARY(Poco_LIBRARIES NAMES PocoFoundationmt PocoNetmt PATH_SUFFIXES ${POCO_DIR}/lib)

编辑:如果您在项目中定义POCO_STATIC,静态链接将通过库标题自动进行,请参见

嗨,亚历克斯,谢谢你的回复。我知道链接是如何工作的:)我的疑问只是在FIND_LIBRARY()中必须使用哪个名称。如果在Windows中有后缀来区分各种类型的构建,那么在Linux中只有扩展名(.a或.so)。所以,如果我写‘PocoFoundationmt’,可能只对Windows有效。我在问自己,是否有一种方法可以对每一个系统都使用相同的指令。使用if(WIN32)来检测操作系统。