Hi,
I got these errors when linking my C++ objects with the libplpa :
g++ -L/usr/local/lib -L/usr/local/xerces/lib -L/usr/lib/mysql -o xxxx
xxxx.o yyyyy.o daemon.o -lxxxx -lxerces-c -lmysqlclient_r -lz -lsnmp -lplpa -lc
daemon.o(.text+0xfea): In function `CDaemon::BindToCpu(int)':
daemon.cpp:108: undefined reference to `plpa_api_probe()'
daemon.o(.text+0x1040):daemon.cpp:113: undefined reference to `plpa_sched_setaffinity(int, unsigned int, plpa_cpu_set_t const*)'
collect2: ld returned 1 exit status
That is due to the fact that in C++, the function's return type and parameters types are
used to name the symbols:
shell> nm -A daemon.o | grep plpa
daemon.o
: U _Z14plpa_api_probev
daemon.o: U _Z22plpa_sched_setaffinityijPK14plpa_cpu_set_t
So the solution is to enclosed the plpa functions definitions in the header by extern "C" { }
compilation directive. The cleanest way to do it should be to modifiy the file
plpa.h :
#ifdef __cplusplus
extern "C" {
#include "plpa_bottom.h"
}
#else
#include "plpa_bottom.h"
#endif
In patch format :
***
plpa.h.in 2006-02-17 14:39:24.000000000 +0100
--- plpa.h.in.patch 2006-09-18 19:04:20.000000000 +0200
***************
*** 72,77 ****
--- 72,84 ----
#undef STDC_HEADERS
+ #ifdef __cplusplus
+ extern "C" {
#include "plpa_bottom.h"
+ }
+ #else
+ #include "plpa_bottom.h"
+ #endif
+
#endif /* PLPA_H */
...
Regards,
Emmanuel