возможно ли принудительное частичное связывание с automake и libtool - PullRequest
0 голосов
/ 21 мая 2019

Используя automake, есть ли способ указать создание объектного файла, частично связав два других объектных файла?

Используя напрямую ld, я могу просто указать:

ld -r core2.o libthird-party.a -o partially-linked.o

Почему?Ну, я создаю аддон узла и (из-за ошибки) узел 11.10.0+ в настоящее время экспортирует символ, который удовлетворяет одному из неопределенных символов моей программы.Таким образом, полученный .so или .a файл, созданный Makefile.am, используется node-gyp для создания аддона узла.

Кажется (и я новичок в среде automake / libtool)что существующая установка оставляет символ в core2 неразрешенным, хотя libthird-party.a предоставляет символ.Я вручную проверил частичное связывание, и это решает проблему.Мой вопрос заключается в том, как указать это в Makefile.am (или в альтернативном подходе, который мог бы выполнить то же самое).

Вот сокращенная версия Makefile.am.Это делает общую библиотеку, а также статическую версию.Я сократил его, чтобы использовать только один сторонний файл и два основных файла.

LIBSOURCES = core.c core2.cc

lib_LTLIBRARIES = libcore.la
libcore_la_SOURCES = $(LIBSOURCES)
libcore_la_LDFLAGS = -export-symbols-regex '^core_' \
    -version-info ${CORE_SO_VERSION) -release 1.0 \
    $(LIBCORE_LDFLAGS_LIBS_STATIC)/lib/libthird-party.a

all: config.h
    $(MAKE) $(AM_MAKEFLAGS) all-am
    cd .libs && echo -e "\
        CREATE libcore_static.a\n\
        ADDLIB libcore.a\n\
        ADDLIB libthird-party.a\n\
        SAVE\n\
        END\n\
    " | ar -M

Любые мысли или помощь будут высоко оценены.

...