Неопределенная ссылка при добавлении функции в libbluray - PullRequest
1 голос
/ 17 марта 2019

При добавлении функций в libbluray и тестировании его во включенном примере make создает «неопределенную ссылку» только для добавленной функции, остальные функции в заголовке работают нормально.

Точные изменения, например:

src/libbluray/bluray.c:

+void do_stuff()
+{
+    //nothing
+}

src/libbluray/bluray.h:

+void do_stuff(void);

src/examples/index_dump.c:
int main(int argc, const char *argv[])
 {
+
+    do_stuff();
+

Ошибка:

/usr/bin/ld: src/examples/index_dump.o: in function `main':
.../libbluray/src/examples/index_dump.c:66: undefined reference to `do_stuff'

index_dump.c включает только

#include <stdio.h>
#include "bluray.h"

Это оченьсбивает с толку.

Также, fgrep do_stuff .libs/libbluray.so показывает, что do_stuff находится в объектном файле.

1 Ответ

0 голосов
/ 17 марта 2019

Makefile.am в libbluray содержит следующее (обернуто здесь):

libbluray_la_LDFLAGS= -no-undefined -version-info $(LT_VERSION_INFO) \
  -export-symbols-regex "^bd_"

В результате из библиотеки экспортируются только символы, начинающиеся с bd_.Символ do_stuff не соответствует этому регулярному выражению, поэтому он не экспортируется и не виден за пределами библиотеки.

Ваша проверка fgrep, вероятно, выбрала имя символа из информации отладки или из таблицы регулярно символов (.symtab, а не таблица динамических символов в .dynsym).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...