nanomsg.nng 在windows下的编译
mkdir buildx64
cd buildx64
cmake -G “Ninja” …
ninja
ninja test
ninja install (这一步不要也可, 因为第6步已经生成了相应的文件在buildx64目录中)
这里需要说明 按照上述的方法 build的结果是一个 nng.lib 这样一个static library, 不是 shared library (dll)
同时,你使用这个nng.lib 配合 nng.h 使用nng, 必然不能成功编译, 报错类似:
Error LNK2019 unresolved external symbol __imp__nng_setopt referenced in function
关于为什么会有 __imp 前缀请查阅其他文档。 这里发生错误是因为,nng.h 默认是配合 shared library (dll) 使用, 而不是 static library (lib)
但是默认的 nng编译却生出来 static library
查看nng.h 的源文件:
注意到宏 NNG_STATIC_LIB 是控制到底使用 static library 还是 shared library 的开关
所以:
1.使用 static library, 必须定义 NNG_STATIC_LIB
2.使用 shared library, 必须定义 NNG_SHARED_LIB
顺便说一句,在我的测试中, NNG_STATIC_LIB 必须在工程中的预定义宏中设置,在其他地方实现无效。
这个问题 nng 上的一个 issue有讨论:
https://github.com/nanomsg/nng/issues/550
再回到最前面,我们如何在命令行中要求cmake 创建 shared library, 而不是 static library呢?
cmake -DBUILD_SHARED_LIBS=ON -G “Ninja” …
参数 BUILD_SHARED_LIBS 显示设为 ON
前缀 -D 表示定义
如此编译出的nng就是 shared lib (dll) 而不是 static lib (lib) 了。
以上我们讲解了如何编译 x86/x64 dll/lib nng的方法
希望对你有帮助。
总结
以上是生活随笔为你收集整理的nanomsg.nng 在windows下的编译的全部内容,希望文章能够帮你解决所遇到的问题。
- 上一篇: 开辟新战场,打造新的商业模式
- 下一篇: OA智能办公系统功能介绍