From: Jakub Jirutka Date: Tue, 13 May 2025 23:45:11 +0200 Subject: Build shared libraries libnjs doesn't guarantee ABI compatibility between versions, so we have to use full version in SONAME (see https://github.com/nginx/njs/issues/691). We currently cannot link njs executable against shared libnjs, because it depends on some internal(?) symbols. diff --git a/auto/make b/auto/make index cc3b022b5b2..33ca12f6a24 100644 --- a/auto/make +++ b/auto/make @@ -119,6 +119,33 @@ $NJS_BUILD_DIR/libqjs.a: \\ \$(NJS_STATIC_LINK) $NJS_BUILD_DIR/libqjs.a \\ \$(QJS_LIB_OBJS) + + +NJS_SONAME = libnjs.so.\$(NJS_VER) +QJS_SONAME = libqjs.so.\$(NJS_VER) + +libnjs.so: $NJS_BUILD_DIR/libnjs.so +libqjs.so: $NJS_BUILD_DIR/libqjs.so + +$NJS_BUILD_DIR/libnjs.so: $NJS_BUILD_DIR/\$(NJS_SONAME) + ln -s \$(^F) \$@ + +$NJS_BUILD_DIR/libqjs.so: $NJS_BUILD_DIR/\$(QJS_SONAME) + ln -s \$(^F) \$@ + +$NJS_BUILD_DIR/\$(NJS_SONAME): \\ + $NJS_BUILD_DIR/njs_auto_config.h \\ + \$(NJS_LIB_OBJS) + + \$(CC) \$(LDFLAGS) -fPIC -shared -Wl,-soname,\$(NJS_SONAME) -o \$@ \\ + \$(NJS_LIB_OBJS) $NJS_LIBS $NJS_LIB_AUX_LIBS + +$NJS_BUILD_DIR/\$(QJS_SONAME): \\ + $NJS_BUILD_DIR/njs_auto_config.h \\ + \$(QJS_LIB_OBJS) + + \$(CC) \$(LDFLAGS) -fPIC -shared -Wl,-soname,\$(QJS_SONAME) -o \$@ \\ + \$(QJS_LIB_OBJS) $NJS_LIBS $NJS_LIB_AUX_LIBS END # object files.