example_udo and 13.3


#1

Dear SciDB Gurus:

I built 13.3 and luckily all our data ingested under 12.10 seems to be intact.
I wanted to rebuild Alex’s example_udo, which compiled cleanly, copied the .so into the plugins folder.
but loading it failed:

$ cp /data/gfekete/src/example_udo/libexample.so /opt/scidb/13.3/lib/scidb/plugins $ iquery -aq "load_library('example');" SystemException in file: src/util/PluginManager.cpp function: findModule line: 112 Error id: scidb::SCIDB_SE_PLUGIN_MGR::SCIDB_LE_CANT_LOAD_MODULE Error description: Plugin manager error. Cannot load module '/opt/scidb/13.3/lib/scidb/plugins/libexample.so', dlopen returned '/opt/scidb/13.3/lib/scidb/plugins/libexample.so: undefined symbol: _ZN5boost6system19get_system_categoryEv. Failed query id: 1103012295132
I have a scidb source tree in place. I made scidb and did not clean.
$SCIDB_SOURCE_DIR is /data/gfekete/src/scidb-13.3.0.6147
where I did “cmake .” and “make” and “make install”

Any ideas?
Thanks, Gurus,

George


#2

George,

Never seen this before. Here’s how I read the error: there is a symbol “_ZN5boost6system19get_system_categoryEv” that the plugin.so refers to that cannot be found. This symbol is from boost. SciDB uses boost but can’t find this symbol.

Is it possible that there are two different versions of boost on your machine and one was used to build scidb, and the other - to build the plugin? Scidb’s boost tends to go into /opt/scidb/VV.V/include/boost. Default installations of boost tend to go into /usr/include/boost. Anything suspicious?


#3

To make sure cmake and make was happy I put all the libboost stuff v1.46 in /opt/scidb/local/lib which is #2 on
my LD_LIBRARY_PATH. But I am guessing the header files may not be in the right place. Since I made boost1.46 from scratch,
I only moved the libs, and left the headers alone, which in the udo’s case is not as important as the header files.
The makefile in example_udo doesn’t -I anything out of the ordinary it defers all includes to query/Operator.h, and I have not
looked deep inside that.

But I could not have built Scidb in the first place without the boost stuff, so what gives?
Should I also define and export INCLUDE? Some Makefiles somewhere seem to use it if memory serves…

George


#4

there is /usr/local/include/boost – came with the system, version 1.42
and I put 1.46.1 in /opt/scidb/local/include to keep it out of everyone else’s way on this system.

So if I add -I/opt/scidb/local/include it should work, right?
Or since query/Operator.h does all the including of boost, is there another pitfall?

I am making some experiments as I write this now …

George


#5

That was it!
As soon as I jammed by boost directory down Makefile’s throad with an explicit -I it worked.
However, during compilation and building scidb itself there were several warning about ignoring
return types. You could (void) them for a pedantically clean make, I s’pose…

Here is the output of make:

$ make 
g++ -Dexample_EXPORTS -pedantic -W -Wextra -Wall -Wno-strict-aliasing -Wno-long-long -Wno-unused-parameter -fPIC -D__STDC_FORMAT_MACROS -Wno-system-headers -isystem -O2 -g -DNDEBUG -ggdb3  -D__STDC_LIMIT_MACROS -I/opt/scidb/local/include -I. -DPROJECT_ROOT="\"/data/gfekete/src/scidb-13.3.0.6147\"" -I"/data/gfekete/src/scidb-13.3.0.6147/include" -I/usr/include/google/protobuf -I/usr/include/postgresql -o plugin.cpp.o -c plugin.cpp
g++ -Dexample_EXPORTS -pedantic -W -Wextra -Wall -Wno-strict-aliasing -Wno-long-long -Wno-unused-parameter -fPIC -D__STDC_FORMAT_MACROS -Wno-system-headers -isystem -O2 -g -DNDEBUG -ggdb3  -D__STDC_LIMIT_MACROS -I/opt/scidb/local/include -I. -DPROJECT_ROOT="\"/data/gfekete/src/scidb-13.3.0.6147\"" -I"/data/gfekete/src/scidb-13.3.0.6147/include" -I/usr/include/google/protobuf -I/usr/include/postgresql -o LogicalExample.cpp.o -c LogicalExample.cpp
In file included from /data/gfekete/src/scidb-13.3.0.6147/include/query/Operator.h:51,
                 from LogicalExample.cpp:23:
/opt/scidb/local/include/boost/serialization/export.hpp:134: warning: type qualifiers ignored on function return type
g++ -Dexample_EXPORTS -pedantic -W -Wextra -Wall -Wno-strict-aliasing -Wno-long-long -Wno-unused-parameter -fPIC -D__STDC_FORMAT_MACROS -Wno-system-headers -isystem -O2 -g -DNDEBUG -ggdb3  -D__STDC_LIMIT_MACROS -I/opt/scidb/local/include -I. -DPROJECT_ROOT="\"/data/gfekete/src/scidb-13.3.0.6147\"" -I"/data/gfekete/src/scidb-13.3.0.6147/include" -I/usr/include/google/protobuf -I/usr/include/postgresql -o PhysicalExample.cpp.o -c PhysicalExample.cpp
In file included from /data/gfekete/src/scidb-13.3.0.6147/include/query/Operator.h:51,
                 from PhysicalExample.cpp:23:
/opt/scidb/local/include/boost/serialization/export.hpp:134: warning: type qualifiers ignored on function return type
g++ -Dexample_EXPORTS -pedantic -W -Wextra -Wall -Wno-strict-aliasing -Wno-long-long -Wno-unused-parameter -fPIC -D__STDC_FORMAT_MACROS -Wno-system-headers -isystem -O2 -g -DNDEBUG -ggdb3  -D__STDC_LIMIT_MACROS -I/opt/scidb/local/include -I. -DPROJECT_ROOT="\"/data/gfekete/src/scidb-13.3.0.6147\"" -I"/data/gfekete/src/scidb-13.3.0.6147/include" -I/usr/include/google/protobuf -I/usr/include/postgresql -o libexample.so plugin.cpp.o LogicalExample.cpp.o PhysicalExample.cpp.o -L"/data/gfekete/src/scidb-13.3.0.6147/lib" -shared -Wl,-soname,libexample.so -L. 

So apparently cmake does find the proper boost when I put 1.46 in the nonstandard location and export the shell variable

INCLUDE=/nonstadard/location/include

As a control, I undefined INCLUDE, made a clean attempt at making SciDB, and got error message from cmake that there was no proper boost around. It looked for 1.46. Does it accept 1.53 (current?) I don’t know…

Bottom line, for the Makefile in example_udo, I had to remind it to look in the nonstandard location even though INCLUDE was set the same way as it was with cmake; make for scidb at the root of the source tree.

Cheers, George


#6

That makes sense. So I added a new variable into the makefile that points to the scidb boost by default. Added a little blurb there to make sure users are aware of this - and folks can point it to wherever they have the right boost installed. Uploaded a new version of the tarball. As always, thanks for the help!


#7

Alex,
Can you show me where the new tarball is? I just went to the download page, but that is the same as before and hasn’t changed since at least April 10. I am talking about scidb-13.3.0.6147.tgz…

Cheers, George


#8

Hey George,

It’s a new UDO tarball here: viewtopic.php?f=18&t=1099 . That makefile.