内容简介:zeromq是非常优秀的开源库,但是由于作者感觉visual studio的编译工具维护起来相当费事,当然也可能是作者更多的是在非windows下工作的原因吧,msvc build不再维护了,这导致了很多在windows下的用户编译zmq非常不方便。尝试了一下,libzmq\builds\deprecated-msvc\vs20xx的工具的确很多已经不工作了。下面记录一下通过cmake编译windows下的工程的方法及步骤。我在项目中用到了zmq、czmq、zyre,由于后两个项目都要依赖前一个项目,所以我
zeromq是非常优秀的开源库,但是由于作者感觉visual studio的编译 工具 维护起来相当费事,当然也可能是作者更多的是在非windows下工作的原因吧,msvc build不再维护了,这导致了很多在windows下的用户编译zmq非常不方便。尝试了一下,libzmq\builds\deprecated-msvc\vs20xx的工具的确很多已经不工作了。
下面记录一下通过cmake编译windows下的工程的方法及步骤。
我在项目中用到了zmq、czmq、zyre,由于后两个项目都要依赖前一个项目,所以我们需要统一管理起来。
1、建立一个zeromq目录;
2、克隆代码
cmd进入此目录,执行:
https://github.com/zeromq/libzmq.git
将libzmq克隆到zeromq目录下;
执行:
https://github.com/zeromq/czmq.git
将czmq克隆到zeromq目录下;
执行:
https://github.com/jedisct1/libsodium.git
将libsodium克隆到zeromq目录下。
libsodium是一个加密库,czmq将要依赖它,所以这里预先准备好。
执行:
https://github.com/zeromq/zyre.git
将zyre克隆到zeromq目录下。
3、cmake配置zmq库
cd进入libzmq目录,执行:
cmake -H. -Bbuild -G"Visual Studio 14 2015 Win64"
通常cmake都能成功,这就在build目录下生成了一个vs2015的编译工程,名称是ZeroMQ.sln
4、生成zmq库
编译ZeroMQ.sln,一般都能正确编译的。这里需要注意,生成的文件是这种格式的:
libzmq-v140-mt-4_3_1.lib
libzmq-v140-mt-4_3_1.dll
这就非常讨厌了,本来如果文件名只是libzmq.dll这样的格式的话,我在更新版本时,如果zmq接口不变,我可以直接替换dll,但是带了版本号就不行了,所以得把它改成libzmq文件名,本来可以通过CMakeLists.txt更改的,但是由于其他项目也依赖了这个lib的名字,反而改起来非常麻烦,简单的方法是,直接在visual studio中,在libzmq工程上mouse right button -> Properties,在弹出来的属性框中,手动把 Configuration Properties -> General -> Target Name 改成 “libzmq”,记得把需要的configuration都改一下(Debug、Release、RelWithDebInfo…),然后分别生产相关dll、lib文件。
另外还得把lib文件名也改了:
Configuration Properties -> Linker -> Advanced -> Import Library 改成 “xxxxxxx/libzmq.lib”
同样,如果需要pdb文件,把pdb文件名也改了:
Configuration Properties -> Linker -> Debugging -> Generate Program Database File 改成 “xxxxxxx/libzmq.pdb”
5、cmake配置czmq库
czmq也抛弃了windows,所以也得自己配置。
czmq配置相对麻烦一些,因为他要依赖zmq,所以我们需要改一下czmq目录下的Findlibzmq.cmake文件,让cmake能正确找到我们刚才编译的zmq的lib文件。
################################################################################
# THIS FILE IS 100% GENERATED BY ZPROJECT; DO NOT EDIT EXCEPT EXPERIMENTALLY #
# Read the zproject/README.md for information about making permanent changes. #
################################################################################
if (NOT MSVC)
include(FindPkgConfig)
pkg_check_modules(PC_LIBZMQ "libzmq")
if (PC_LIBZMQ_FOUND)
# add CFLAGS from pkg-config file, e.g. draft api.
add_definitions(${PC_LIBZMQ_CFLAGS} ${PC_LIBZMQ_CFLAGS_OTHER})
# some libraries install the headers is a subdirectory of the include dir
# returned by pkg-config, so use a wildcard match to improve chances of finding
# headers and SOs.
set(PC_LIBZMQ_INCLUDE_HINTS ${PC_LIBZMQ_INCLUDE_DIRS} ${PC_LIBZMQ_INCLUDE_DIRS}/*)
set(PC_LIBZMQ_LIBRARY_HINTS ${PC_LIBZMQ_LIBRARY_DIRS} ${PC_LIBZMQ_LIBRARY_DIRS}/*)
endif(PC_LIBZMQ_FOUND)
else()
set(PC_LIBZMQ_INCLUDE_DIRS ../libzmq/include)
set(PC_LIBZMQ_LIBRARY_DIRS ../libzmq/build/lib/Release)
set(PC_LIBZMQ_INCLUDE_HINTS ${PC_LIBZMQ_INCLUDE_DIRS} ${PC_LIBZMQ_INCLUDE_DIRS}/*)
set(PC_LIBZMQ_LIBRARY_HINTS ${PC_LIBZMQ_LIBRARY_DIRS} ${PC_LIBZMQ_LIBRARY_DIRS}/*)
endif (NOT MSVC)
message("######## ${PC_LIBZMQ_INCLUDE_HINTS}")
message("######## ${PC_LIBZMQ_LIBRARY_HINTS}")
find_path (
LIBZMQ_INCLUDE_DIRS
NAMES zmq.h
HINTS ${PC_LIBZMQ_INCLUDE_HINTS}
)
find_library (
LIBZMQ_LIBRARIES
NAMES libzmq
HINTS ${PC_LIBZMQ_LIBRARY_HINTS}
)
include(FindPackageHandleStandardArgs)
find_package_handle_standard_args(
LIBZMQ
REQUIRED_VARS LIBZMQ_LIBRARIES LIBZMQ_INCLUDE_DIRS
)
mark_as_advanced(
LIBZMQ_FOUND
LIBZMQ_LIBRARIES LIBZMQ_INCLUDE_DIRS
)
################################################################################
# THIS FILE IS 100% GENERATED BY ZPROJECT; DO NOT EDIT EXCEPT EXPERIMENTALLY #
# Read the zproject/README.md for information about making permanent changes. #
################################################################################
czmq依赖的另一个库是libsodium,还好,libsodium的vs编译还在,打开libsodium\builds\msvc\vs2015目录下的libsodium.sln文件,可直接生成对应的libsodium.dll和libsodium.lib
然后在czmq目录下找到Findlibsodium.cmake文件,修改如下:
################################################################################
# THIS FILE IS 100% GENERATED BY ZPROJECT; DO NOT EDIT EXCEPT EXPERIMENTALLY #
# Please refer to the README for information about making permanent changes. #
################################################################################
if (NOT MSVC)
include(FindPkgConfig)
pkg_check_modules(PC_LIBSODIUM "libsodium")
if (NOT PC_LIBSODIUM_FOUND)
pkg_check_modules(PC_LIBSODIUM "libsodium")
endif (NOT PC_LIBSODIUM_FOUND)
if (PC_LIBSODIUM_FOUND)
# some libraries install the headers is a subdirectory of the include dir
# returned by pkg-config, so use a wildcard match to improve chances of finding
# headers and SOs.
set(PC_LIBSODIUM_INCLUDE_HINTS ${PC_LIBSODIUM_INCLUDE_DIRS} ${PC_LIBSODIUM_INCLUDE_DIRS}/*)
set(PC_LIBSODIUM_LIBRARY_HINTS ${PC_LIBSODIUM_LIBRARY_DIRS} ${PC_LIBSODIUM_LIBRARY_DIRS}/*)
endif(PC_LIBSODIUM_FOUND)
else()
set(PC_LIBSODIUM_INCLUDE_DIRS ${CMAKE_CURRENT_SOURCE_DIR}/../libsodium/src/libsodium/include)
set(PC_LIBSODIUM_LIBRARY_DIRS ${CMAKE_CURRENT_SOURCE_DIR}/../libsodium/bin/x64/Release/v140/dynamic)
set(PC_LIBSODIUM_INCLUDE_HINTS ${PC_LIBSODIUM_INCLUDE_DIRS} ${PC_LIBSODIUM_INCLUDE_DIRS}/*)
set(PC_LIBSODIUM_LIBRARY_HINTS ${PC_LIBSODIUM_LIBRARY_DIRS} ${PC_LIBSODIUM_LIBRARY_DIRS}/*)
endif (NOT MSVC)
find_path (
LIBSODIUM_INCLUDE_DIRS
NAMES sodium.h
HINTS ${PC_LIBSODIUM_INCLUDE_HINTS}
)
find_library (
LIBSODIUM_LIBRARIES
NAMES libsodium
HINTS ${PC_LIBSODIUM_LIBRARY_HINTS}
)
include(FindPackageHandleStandardArgs)
find_package_handle_standard_args(
LIBSODIUM
REQUIRED_VARS LIBSODIUM_LIBRARIES LIBSODIUM_INCLUDE_DIRS
)
mark_as_advanced(
LIBSODIUM_FOUND
LIBSODIUM_LIBRARIES LIBSODIUM_INCLUDE_DIRS
)
################################################################################
# THIS FILE IS 100% GENERATED BY ZPROJECT; DO NOT EDIT EXCEPT EXPERIMENTALLY #
# Please refer to the README for information about making permanent changes. #
################################################################################
6、生成czmq库
这个就简单了,打开编译就行啦
7、zyre的参考czmq的,差别不大
以上所述就是小编给大家介绍的《zmq、czmq及其他相关动态库的编译和生成》,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对 码农网 的支持!
猜你喜欢:- [译] 使用 GCC 编译生成 BPF 程序
- 代码生成技术初探(一)表达式编译
- C# 9 新特性:代码生成器、编译时反射
- C赋值运算符 – 编译器生成还是自定义?
- 模块化-Application多module共存编译生成解决方案
- 使用JS实现JS编译器,并将目标js生成二进制
本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。
垃圾回收算法手册:自动内存管理的艺术
Richard Jones、Eliot Moss、Antony Hosking / 王雅光、薛迪 / 机械工业出版社 / 2016-3 / 139
在自动内存管理领域,Richard Jones于1996年出版的《Garbage Collection:Algorithms for Automatic Dynamic Memory Management》可谓是一部里程碑式的作品。接近20年过去了,垃圾回收技术得到了非常大的发展,因此有必要将该领域当前最先进的技术呈现给读者。本书汇集了自动内存管理研究者和开发者们在过去50年间的丰富经验,在本书中......一起来看看 《垃圾回收算法手册:自动内存管理的艺术》 这本书的介绍吧!