Comments (3)
Yeah, the problem here is an age old one of how Windows DLLs work. There are probably ways we could make this a little less painful.
The NNG_STATIC_LIB macro should be set when building a static library, which causes the symbols to be renamed -- without that we default to using the dynamic version of symbol naming, and you get these link failures.
This is only a problem on Windows, and I'm not sure how to do a better job of making this easy for folks using DLLs or using static libraries. Right now the default favors DLL users.
from nng.
If some Windows / CMake GURU comes along, maybe they can offer some wisdom to make this better.
from nng.
NNG / Nanomsg compilation under windows
Created by Robert Heslar, with a template Just a moment ago3 min read Analytics this is instructions i have used to build the NNG library from sources
visual studio 2017 and above is required for these steps
📘 Instructions
clone the repo: GitHub - nanomsg/nng: nanomsg-next-generation -- light-weight brokerless messaging
open a visual studio command prompt, and navigate to the build directory
run cmake .., from the command line, this will create a visual studio solution named nng.sln
open the nng.sln, in visual studio
in visual studio, rebuild the solution, we now have a nng.lib file, for use with a NNG / Nanomsg Application
Highlight important information in a panel like this one. To edit this panel's color or style, select one of the options in the menu.
📋 Related articles this shows the instructions used to build the NNG asyc application demo, found in the NNG demos folder
create the folder path as below, so cmake can find the library and header files for the NNG asyc application demo:
copy the nng includes into the include path above, the include directory in the NNG asyc application demo path:
copy the nng.lib file from the nng/build/Debug directory(from steps in the above article), to the NNG asyc application lib directory
for this NNG application, have this CMakelist.text file:
CMakeLists.txt 26 Jan 2023, 10:09 AM 6) open a visual studio command prompt, and navigate to the NNG asyc application demo build directory
- navigate to the NNG asyc application demo build directory path
8 run cmake .., form the NNG asyc application demo build directory
- a visual studio solution will be created with the name: nng-asyncdemo.sln
- open the nng-asyncdemo.sln in visual studio
- run rebuild all, in the nng-asyncdemo solution, in visual studio
problems: (added nng.lib from steps before (compiling nng source under windows)
when compiling the NNG asyc application demo visual studio we now get the following linker errors:
NNG application missing link symbols:
2>survey.obj : error LNK2019: unresolved external symbol __imp_nng_close referenced in function server_function 2>survey.obj : error LNK2019: unresolved external symbol __imp_nng_listen referenced in function server_function 2>survey.obj : error LNK2019: unresolved external symbol __imp_nng_listener_create referenced in function run_server 2>survey.obj : error LNK2019: unresolved external symbol __imp_nng_listener_start referenced in function run_server 2>survey.obj : error LNK2019: unresolved external symbol __imp_nng_listener_get_addr referenced in function run_server 2>survey.obj : error LNK2019: unresolved external symbol __imp_nng_strerror referenced in function fatal 2>survey.obj : error LNK2019: unresolved external symbol __imp_nng_send referenced in function server_function 2>survey.obj : error LNK2019: unresolved external symbol __imp_nng_recv referenced in function recive_function1 2>survey.obj : error LNK2019: unresolved external symbol __imp_nng_free referenced in function recive_function1 2>survey.obj : error LNK2019: unresolved external symbol __imp_nng_surveyor0_open referenced in function server_function CMakeLists.txt CMakeLists.txt
if you want to use static lib in windows, maybe you should add a pre-compile instruction for your pre-processor such like this 'add_compile_definitions(NNG_STATIC_LIB)' in your CMakeList
from nng.
Related Issues (20)
- If I understand correctly, NNG's REP is analog to ROUTER when in raw mode or using a context object for asynchronous operations. REQ is similarly analog to DEALER when in raw mode or using a context object. So these socket types are unnecessary... I presume that the same reasoning applies to the lack of XPUB/XSUB in NNG. HOT 1
- Replace ZMQ(router/dealer) to NNG in raw mode problem HOT 1
- [Question] How to pass a value or datas in the callback function of nng_aio_alloc?
- Your text about Russia/Ukraine (typo) HOT 1
- Websocket masking could a lot faster
- IPC socket could support setting ownership HOT 1
- Missing Header in posix_rand_getrandom.c
- nng_msg_insert: munmap_chunk(): invalid pointer HOT 3
- Deadlock during nng_close() - multi platform HOT 23
- Sendmsg Thread Blocking HOT 3
- How to create a new language binding using a binary/dll? HOT 1
- Compiler warnings / errors from new logging feature on Windows HOT 2
- Windows a deadlock on `nng_close()` HOT 13
- mqttv5_client chokes on CONNACK packet HOT 2
- setting NNG_OPT_TLS_CONFIG on socket should hold reference HOT 6
- Memory Leak in nng_rep0_open HOT 2
- IPC - Use After Free HOT 4
- Will the NNG framework built-in handle packet splitting and sticking issues during streaming transmission? HOT 2
- Tools or API could obtain all communication endpoint information for establishing communication with this machine HOT 2
- nng_socket_set_ms didn't work HOT 2
Recommend Projects
-
React
A declarative, efficient, and flexible JavaScript library for building user interfaces.
-
Vue.js
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
-
Typescript
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
-
TensorFlow
An Open Source Machine Learning Framework for Everyone
-
Django
The Web framework for perfectionists with deadlines.
-
Laravel
A PHP framework for web artisans
-
D3
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
-
Recommend Topics
-
javascript
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
-
web
Some thing interesting about web. New door for the world.
-
server
A server is a program made to process requests and deliver data to clients.
-
Machine learning
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
-
Visualization
Some thing interesting about visualization, use data art
-
Game
Some thing interesting about game, make everyone happy.
Recommend Org
-
Facebook
We are working to build community through open source technology. NB: members must have two-factor auth.
-
Microsoft
Open source projects and samples from Microsoft.
-
Google
Google ❤️ Open Source for everyone.
-
Alibaba
Alibaba Open Source for everyone
-
D3
Data-Driven Documents codes.
-
Tencent
China tencent open source team.
from nng.