Error while LoadLibrary a c-shared .so in CentOS
Show older comments
I have created a C application and built it as a C-Shared library .so. The C application contains reference to ZMQ library. To generate the shared library I tried following steps:
1) I wrote a C application ZMQInterface.c with a header file ZMQInterface.h
2) Built the application as C-shared library
[varun@localhost zmqproj]$ gcc -c -Wall -Werror -I/usr/local/include/ -L/usr/local/lib -lzmq -fpic ZMQInterface.c
[varun@localhost zmqproj]$ gcc -shared -o ZMQInterface.so ZMQInterface.o
The shared library ZMQInterface.so was generated successfully
When I tried to load it in MATLAB using loadlibrary() I am getting the following error. I have attached the files (zmqproj.zip)
>> [status,warn] = loadlibrary('ZMQInterface.so','ZMQInterface.h');
Error loading library intermediate output follows.
The actual error is at the end of this output.
*********
Type '' was not found. Defaulting to type error.
Found on line 11 of input from line 5 of file /home/varun/zmqproj/ZMQInterface.h
Type 'char(visibility("default")))Ptrs_recv(voidPtr' was not found. Defaulting to type voidPtr.
Found on line 11 of input from line 5 of file /home/varun/zmqproj/ZMQInterface.h
Type '' was not found. Defaulting to type error.
Found on line 12 of input from line 6 of file /home/varun/zmqproj/ZMQInterface.h
Failed to parse type '( visibility (" default "))) void * create_socket_context ( void' original input '( visibility (" default "))) void * create_socket_context ( void '
Found on line 12 of input from line 6 of file /home/varun/zmqproj/ZMQInterface.h
Error parsing argument for function __attribute__ function may be invalid.
Type '' was not found. Defaulting to type error.
Found on line 13 of input from line 7 of file /home/varun/zmqproj/ZMQInterface.h
Type 'int(visibility("default")))voidPtrcreate_socket_subscriber(voidPtr' was not found. Defaulting to type voidPtr.
Found on line 13 of input from line 7 of file /home/varun/zmqproj/ZMQInterface.h
*********
Error using loadlibrary
Building ZMQInterface_thunk_glnxa64 failed. Compiler output is:
/usr/bin/gcc -I"/usr/local/MATLAB/R2017a/extern/include" -fexceptions -fPIC -fno-omit-frame-pointer -pthread -I"/home/varun/zmqproj"
-I"/home/varun/zmqproj" "ZMQInterface_thunk_glnxa64.c" -o "ZMQInterface_thunk_glnxa64.so" -Wl,-E -shared
ZMQInterface_thunk_glnxa64.c: In function ‘voidPtrThunk’:
ZMQInterface_thunk_glnxa64.c:38:14: error: expected expression before ‘)’ token
return (( (*)(void * ))fcn)(p0);
^
ZMQInterface_thunk_glnxa64.c:38:25: error: expected ‘)’ before ‘fcn’
return (( (*)(void * ))fcn)(p0);
^
ZMQInterface_thunk_glnxa64.c: At top level:
ZMQInterface_thunk_glnxa64.c:42:30: error: expected declaration specifiers or ‘...’ before string constant
EXPORT_EXTERN_C (visibility("default")))void*create_socket_context(voidThunk(void fcn(),const char *callstack,int stacksize)
^
Try 2 :
Then I tried removing the __attribute__ ((visibility ("default"))) then compiled and loaded. But I am getting following error then
Error using loadlibrary
There was an error loading the library "/home/varun/zmqproj/ZMQInterface.so"
Missing symbol 'zmq_connect' required by '/home/varun/zmqproj/ZMQInterface.so'
Missing symbol 'zmq_ctx_new' required by '/home/varun/zmqproj/ZMQInterface.so'
Missing symbol 'zmq_recv' required by '/home/varun/zmqproj/ZMQInterface.so'
Missing symbol 'zmq_send' required by '/home/varun/zmqproj/ZMQInterface.so'
Missing symbol 'zmq_socket' required by '/home/varun/zmqproj/ZMQInterface.so'
Caused by:
Error using loaddefinedlibrary
Missing symbol 'zmq_connect' required by '/home/varun/zmqproj/ZMQInterface.so'
Missing symbol 'zmq_ctx_new' required by '/home/varun/zmqproj/ZMQInterface.so'
Missing symbol 'zmq_recv' required by '/home/varun/zmqproj/ZMQInterface.so'
Missing symbol 'zmq_send' required by '/home/varun/zmqproj/ZMQInterface.so'
Missing symbol 'zmq_socket' required by '/home/varun/zmqproj/ZMQInterface.so'
Could any one help me to know the actual cause for this issue ?
Execution Environment :
OS - CentOS 7 64 bit
gcc version - gcc (GCC) 4.8.5 20150623 (Red Hat 4.8.5-36)
MATLAB 2017a
Answers (0)
Categories
Find more on Creating, Deleting, and Querying Graphics Objects in Help Center and File Exchange
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!