c++ - nanomsg: Segmentation fault when using cmake -
i'm using nanomsg request/receive , code have works fine when compiled using makefile. when try using cmake, compiles fine runs segmentation fault when trying send message.
does know what's going on? i'm unsure if issue in cmake file or in .cc files.
here minimal working example.
request.cc (its .h file omitted here)
requester::requester(const char* url) { int socket = nn_socket(af_sp, nn_req); assert(socket >= 0); assert(nn_connect (socket, url) >= 0); } requester::~requester() { nn_shutdown(socket, 0); } const char* requester::request_for_sentence(const char* sentence){ int size_sentence = strlen(sentence) + 1; int bytes = nn_send(socket, sentence, size_sentence, 0); # segmentation fault occurs here assert(bytes == size_sentence); char *buf = null; bytes = nn_recv(socket, &buf, nn_msg, 0); assert(bytes >= 0); printf("requester received %s\n", buf); return buf; } request_test.cc
int main(int argc, char** argv) { extractor::requester my_requester("ipc:///tmp/extractor.ipc"); const char* output = my_requester.request_for_sentence("some input"); cerr << "output: " << output << endl; return 0; } receiver.cc
int main(int argc, char** argv) { const char* url = "ipc:///tmp/extractor.ipc"; int socket = nn_socket (af_sp, nn_rep); assert(socket >= 0); assert(nn_bind (socket, url) >= 0); while(1){ char *buf = null; int bytes = nn_recv(socket, &buf, nn_msg, 0); assert (bytes >= 0); const char* grammar_for_sentence = extract_for_sentence(buf); cerr << grammar_for_sentence << endl; int size_grammar = strlen(grammar_for_sentence) + 1; // '\0' bytes = nn_send(socket, grammar_for_sentence, size_grammar, 0); assert(bytes == size_grammar); nn_freemsg (buf); } return 0; } makefile works:
cc=g++ cflags = -l$home/opt/lib -i$home/opt/include -lnanomsg : run_test run_extract_daemon run_test : extract_request_test.cc extract_request.o $(cc) $(cflags) -o run_test extract_request_test.cc extract_request.o -i. run_extract_daemon : extract_daemon.cc $(cc) $(cflags) -o run_extract_daemon extract_daemon.cc extract_request.o : extract_request.cc extract_request.h $(cc) $(cflags) -c extract_request.cc clean : rm run_test run_extract_daemon extract_request.o cmakelists.txt doesn't work:
find_package(nanomsg) if(nanomsg_found) include_directories(${nanomsg_include_dir}) set(extract_request_test_srcs extract_request_test.cc) add_executable(run_extractor_request_test ${extract_request_test_srcs}) target_link_libraries(run_extractor_request_test extractor ${nanomsg_libraries}) set(extract_daemon_srcs extract_daemon.cc) add_executable(run_daemon ${extract_daemon_srcs}) target_link_libraries(run_daemon extractor ${nanomsg_libraries}) endif(nanomsg_found) set(extractor_stat_srcs extract_request.cc extract_request.h) add_library(extractor static ${extractor_stat_srcs})
Comments
Post a Comment