mirror of
https://github.com/logos-messaging/logos-delivery.git
synced 2026-03-19 07:23:27 +00:00
3.4 KiB
3.4 KiB
Building liblogosdelivery and Examples
Prerequisites
- Nim 2.x compiler
- Rust toolchain (for RLN dependencies)
- GCC or Clang compiler
- Make
Building the Library
Dynamic Library
make liblogosdelivery
This creates build/liblogosdelivery.dylib (macOS) or build/liblogosdelivery.so (Linux).
Static Library
nim liblogosdelivery STATIC=1
This creates build/liblogosdelivery.a.
Building Examples
liblogosdelivery Example
Compile the C example that demonstrates all library features:
# Using Make (recommended)
make liblogosdelivery_example
# Or manually on macOS:
gcc -o build/liblogosdelivery_example \
liblogosdelivery/examples/liblogosdelivery_example.c \
-I./liblogosdelivery \
-L./build \
-llmapi \
-Wl,-rpath,./build
# Or manually on Linux:
gcc -o build/liblogosdelivery_example \
liblogosdelivery/examples/liblogosdelivery_example.c \
-I./liblogosdelivery \
-L./build \
-llmapi \
-Wl,-rpath='$ORIGIN'
Running Examples
./build/liblogosdelivery_example
The example will:
- Create a Logos Messaging node
- Register event callbacks for message events
- Start the node
- Subscribe to a content topic
- Send a message
- Show message delivery events (sent, propagated, or error)
- Unsubscribe and cleanup
Build Artifacts
After building, you'll have:
build/
├── liblogosdelivery.dylib # Dynamic library (34MB)
├── liblogosdelivery.dylib.dSYM/ # Debug symbols
└── liblogosdelivery_example # Compiled example (34KB)
Library Headers
The main header file is:
liblogosdelivery/liblogosdelivery.h- C API declarations
Troubleshooting
Library not found at runtime
If you get "library not found" errors when running the example:
macOS:
export DYLD_LIBRARY_PATH=/path/to/build:$DYLD_LIBRARY_PATH
./build/liblogosdelivery_example
Linux:
export LD_LIBRARY_PATH=/path/to/build:$LD_LIBRARY_PATH
./build/liblogosdelivery_example
Compilation fails
Make sure you've run:
make update
This updates all git submodules which are required for building.
Static Linking
To link statically instead of dynamically:
gcc -o build/logosdelivery_example \
liblogosdelivery/examples/logosdelivery_example.c \
-I./liblogosdelivery \
build/liblogosdelivery.a \
-lm -lpthread
Note: Static library is much larger (~129MB) but creates a standalone executable.
Cross-Compilation
For cross-compilation, you need to:
- Build the Nim library for the target platform
- Use the appropriate cross-compiler
- Link against the target platform's liblogosdelivery
Example for Linux from macOS:
# Build library for Linux (requires Docker or cross-compilation setup)
# Then compile with cross-compiler
Integration with Your Project
CMake
find_library(LMAPI_LIBRARY NAMES lmapi PATHS ${PROJECT_SOURCE_DIR}/build)
include_directories(${PROJECT_SOURCE_DIR}/liblogosdelivery)
target_link_libraries(your_target ${LMAPI_LIBRARY})
Makefile
CFLAGS += -I/path/to/liblogosdelivery
LDFLAGS += -L/path/to/build -llmapi -Wl,-rpath,/path/to/build
your_program: your_program.c
$(CC) $(CFLAGS) $< -o $@ $(LDFLAGS)
API Documentation
See:
- liblogosdelivery.h - API function declarations
- MESSAGE_EVENTS.md - Message event handling guide