This folder contains a project that uses the bundled nanarrow and nanoarrow_ipc.c files included in the dist/ directory of this repository (or that can be generated using cmake -DNANOARROW_BUNDLE=ON
from the root CMake project). Like the CMake example, you must be careful to not expose nanoarrow‘s headers outside your project and make use of #define NANOARROW_NAMESPACE MyProject
to prefix nanoarrow’s symbol names to ensure they do not collide with another copy of nanoarrow potentially linked to by another project.
The nanoarrow/ files included in this example are stubs to illustrate how these files could fit in to a library and/or command-line application project. The easiest way is to use the pre-generated versions in the dist/ folder of this repository:
git clone https://github.com/apache/arrow-nanoarrow.git cd arrow-nanoarrow/examples/vendored-ipc mkdir -p src/nanoarrow cp ../../dist/nanoarrow.h src/nanoarrow/nanoarrow.h cp ../../dist/nanoarrow.c src/nanoarrow/nanoarrow.c cp ../../dist/nanoarrow_ipc.h src/nanoarrow/nanoarrow_ipc.h cp ../../dist/nanoarrow_ipc.c src/nanoarrow/nanoarrow_ipc.c cp ../../dist/flatcc.c src/nanoarrow/flatcc.c cp -r ../../dist/flatcc src/nanoarrow/flatcc
If you use these, you will have to manually #define NANOARROW_NAMESPACE MyProject
in nanoarrow.h.
You can also generate the bundled versions with the namespace defined using cmake
:
git clone https://github.com/apache/arrow-nanoarrow.git cd arrow-nanoarrow/examples/vendored-ipc # First, build and install nanoarrow mkdir build pushd build cmake ../../.. -DNANOARROW_BUNDLE=ON -DNANOARROW_NAMESPACE=ExampleVendored cmake --build . cmake --install . --prefix=../src/nanoarrow popd # Then, build and install nanoarrow_ipc mkdir build_ipc pushd build_ipc cmake ../../../extensions/nanoarrow_ipc -DNANOARROW_IPC_BUNDLE=ON cmake --build . cmake --install . --prefix=../src/nanoarrow popd
Then you can build/link the application/library using the build tool of your choosing:
cd src cc -c library.c nanoarrow/nanoarrow.c nanoarrow/flatcc.c nanoarrow/nanoarrow_ipc.c -I./nanoarrow -I./nanoarrow/flatcc ar rcs libexample_vendored_ipc_library.a library.o nanoarrow.o nanoarrow_ipc.o flatcc.o cc -o example_vendored_ipc_app app.c libexample_vendored_ipc_library.a
You can test the command-line application using the two files provided in the example directory:
cat ../schema-valid.arrows | ./example_vendored_ipc_app cat ../invalid.arrows | ./example_vendored_ipc_app # Expected 0xFFFFFFFF at start of message but found 0xFFFFFF00