I have spent several hours trying to resolve an undefined reference to PCD_api_register_exception_handlers. If I compile in c, everything seems fine, but many of my daemons are written in C++. Is it not possible to use the exception handlers in C++? Thanks in Advance. I really am impressed by this product and would like to use it in my embedded system.
If you would like to refer to this comment somewhere else in this project, copy and paste the following link:
It shouldn't be a problem. I assume that you have a C++ program that you want to be instrumented with the exception handlers. Did you make sure that you linked your program with libpcd.so and libipc.so ?
If you would like to refer to this comment somewhere else in this project, copy and paste the following link:
Anonymous
-
2011-08-05
Thanks for the quick response. I am pretty sure I am linking the correct libraries. I was struggling with it so much that I stole the compile line from the example script (changing the compiler, of course). This is what I see.
g++ SystemDataManagement.cpp -lipc -lpcd -lrt -lsqlite3
/tmp/ccPfqBS3.o: In function `main':
SystemDataManagement.cpp:(.text+0xf77): undefined reference to `PCD_api_register_exception_handlers(char*, void (*)(int))'
collect2: ld returned 1 exit status
It seems to be a problem associated with the g++ compiler. If I change the build.sh script thus:
${CROSS}g++ ${i}.c -I ${PCD_DIR}/include -L ${PCD_LIBS_DIR} -lipc -lpcd -lrt -o ../bin/${i}
I get the same error
Compiling a.c
/tmp/ccC0v8aj.o: In function `main':
a.c:(.text+0x22): undefined reference to `PCD_api_register_exception_handlers(char*, void (*)(int))'
collect2: ld returned 1 exit status
I'm going to do a little more homework on moving from gcc to g++ to see if I can find out what I am doing wrong. I am very interested in using PCD for my current project. PCD fills many of the needs I have for daemon management that I thought I would have to write myself (poorly, at least the first time out of the gate!) I will post back with what I learn and thanks again.
If you would like to refer to this comment somewhere else in this project, copy and paste the following link:
Anonymous
-
2011-08-05
FIXED I found my problem. I neglected to #ifdef __cplusplus extern "C" { #endif around my C header files. Thanks again!
If you would like to refer to this comment somewhere else in this project, copy and paste the following link:
I have spent several hours trying to resolve an undefined reference to PCD_api_register_exception_handlers. If I compile in c, everything seems fine, but many of my daemons are written in C++. Is it not possible to use the exception handlers in C++? Thanks in Advance. I really am impressed by this product and would like to use it in my embedded system.
It shouldn't be a problem. I assume that you have a C++ program that you want to be instrumented with the exception handlers. Did you make sure that you linked your program with libpcd.so and libipc.so ?
Thanks for the quick response. I am pretty sure I am linking the correct libraries. I was struggling with it so much that I stole the compile line from the example script (changing the compiler, of course). This is what I see.
g++ SystemDataManagement.cpp -lipc -lpcd -lrt -lsqlite3
/tmp/ccPfqBS3.o: In function `main':
SystemDataManagement.cpp:(.text+0xf77): undefined reference to `PCD_api_register_exception_handlers(char*, void (*)(int))'
collect2: ld returned 1 exit status
It seems to be a problem associated with the g++ compiler. If I change the build.sh script thus:
${CROSS}g++ ${i}.c -I ${PCD_DIR}/include -L ${PCD_LIBS_DIR} -lipc -lpcd -lrt -o ../bin/${i}
I get the same error
Compiling a.c
/tmp/ccC0v8aj.o: In function `main':
a.c:(.text+0x22): undefined reference to `PCD_api_register_exception_handlers(char*, void (*)(int))'
collect2: ld returned 1 exit status
I'm going to do a little more homework on moving from gcc to g++ to see if I can find out what I am doing wrong. I am very interested in using PCD for my current project. PCD fills many of the needs I have for daemon management that I thought I would have to write myself (poorly, at least the first time out of the gate!) I will post back with what I learn and thanks again.
FIXED I found my problem. I neglected to #ifdef __cplusplus extern "C" { #endif around my C header files. Thanks again!
Great! Could you please attach an example of your fix so I could have it available for any future C++ user?