Вложенная библиотека cmake - PullRequest
4 голосов
/ 04 ноября 2011

У нас есть C/C++ проект, организованный следующим образом:

lib1/
    CMakeLists.txt
    sublib1/
        CMakeLists.txt
        foo.c
    log.c
    log.h

Каталог sublib1/ связан с командами add_library и target_link_libraries CMake в его файле CMakeLists.txt.

Изменение: Мы не можем вызвать foo.c/some-func функцию из log.c/some-func-2.Линкер жалуется, что эти функции не определены.

1 Ответ

1 голос
/ 04 ноября 2011

Порядок, в котором библиотеки и объектные файлы появляются в вашей команде ссылки, имеет значение и может привести к недоразумениям с неопределенными символами.Вы не предоставляете много информации вашему посту, но попробуйте сказать компоновщику, что все ваши библиотеки должны рассматриваться как группа.Как в:

--start-group <all your libs> --end-group

Из документации компоновщика:

Обычно поиск в архиве выполняется только один раз в порядке, указанном в командной строке.Если символ в этом архиве необходим для разрешения неопределенного символа, на который ссылается объект в архиве, который появляется позже в командной строке, компоновщик не сможет разрешить эту ссылку.Сгруппировав архивы, они все будут повторно проверены, пока все возможные ссылки не будут разрешены.Использование этой опции имеет значительную производительность.Лучше всего использовать его только тогда, когда между двумя или более архивами есть неизбежные циклические ссылки.

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